Rumah >hujung hadapan web >tutorial js >Perbezaan antara undefined dan null dalam kemahiran javascript_javascript

Perbezaan antara undefined dan null dalam kemahiran javascript_javascript

WBOY
WBOYasal
2016-05-16 15:44:471124semak imbas

Kebanyakan bahasa komputer mempunyai satu dan hanya satu nilai yang mewakili "tiada", seperti NULL dalam bahasa C, null dalam bahasa Java, None dalam bahasa Python dan nil dalam bahasa Ruby.

Agak aneh, bahasa JavaScript sebenarnya mempunyai dua nilai yang mewakili "tiada": undefined dan null. kenapa begitu?

1. Persamaan

Dalam JavaScript, memberikan pembolehubah kepada undefined atau null hampir tiada perbezaan, sejujurnya.

var a = undefined;

var a = null;

Dalam kod di atas, pembolehubah ditetapkan masing-masing kepada undefined dan null Kedua-dua kaedah penulisan hampir sama.
Undefined dan null akan ditukar secara automatik kepada false dalam pernyataan if, dan pengendali kesamaan akan secara langsung melaporkan bahawa ia adalah sama.

if (!undefined) 
  console.log('undefined is false');
// undefined is false

if (!null) 
  console.log('null is false');
// null is false

undefined == null
// true

Kod di atas menggambarkan betapa serupa tingkah laku kedua-duanya!

Memandangkan makna dan penggunaan undefined dan null adalah serupa, mengapa anda perlu menetapkan dua nilai sedemikian pada masa yang sama Bukankah ini meningkatkan kerumitan JavaScript tanpa sebab dan masalah pemula? Bahasa Dart, pengganti bahasa JavaScript yang dibangunkan oleh Google, dengan jelas menetapkan bahawa hanya ada null dan tidak ada undefined!

2. Sebab sejarah

Baru-baru ini, semasa saya membaca buku baharu "Speaking JavaScript", saya secara tidak sengaja menemui jawapan kepada soalan ini!
Ternyata, ini ada kaitan dengan sejarah JavaScript. Apabila JavaScript dilahirkan pada tahun 1995, pada mulanya seperti Java, hanya null ditetapkan sebagai nilai yang mewakili "tiada".
Menurut tradisi bahasa C, null direka untuk ditukar secara automatik kepada 0.

Number(null)
// 0

5 + null
// 5

Walau bagaimanapun, pereka JavaScript Brendan Eich merasakan bahawa ini tidak mencukupi, kerana dua sebab.

Pertama sekali, null dianggap sebagai objek sama seperti di Jawa. Walau bagaimanapun, jenis data JavaScript dibahagikan kepada dua kategori: jenis primitif (primitif) dan jenis komposit (kompleks Brendan Eich merasakan bahawa nilai yang mewakili "tiada" adalah yang terbaik bukan objek.

Kedua, versi awal JavaScript tidak menyertakan mekanisme pengendalian ralat Apabila ketidakpadanan jenis data berlaku, jenis tersebut selalunya ditukar secara automatik atau gagal secara senyap. Brendan Eich merasakan bahawa jika null ditukar secara automatik kepada 0, ia akan menjadi sukar untuk mencari ralat.

Oleh itu, Brendan Eich mereka bentuk lain yang tidak ditentukan.

3. Reka bentuk awal

Versi asal JavaScript dibezakan seperti ini: null ialah objek yang mewakili "tiada" dan 0 apabila ditukar kepada nilai berangka adalah nilai primitif yang mewakili "tiada" dan NaN apabila ditukar kepada nilai berangka; .

Number(undefined)
// NaN

5 + undefined
// NaN

4. Penggunaan semasa

Walau bagaimanapun, perbezaan di atas dengan cepat terbukti tidak dapat dilaksanakan dalam amalan. Pada masa ini, null dan undefined pada asasnya sinonim, dengan hanya beberapa perbezaan halus.
null bermaksud "tiada objek", iaitu, tidak sepatutnya ada nilai di sana. Penggunaan biasa ialah:
(1) Sebagai parameter fungsi, ia bermakna parameter fungsi itu bukan objek.
(2) Sebagai titik akhir rantai prototaip objek.

Object.getPrototypeOf(Object.prototype)
// null

undefined bermaksud "nilai yang hilang", iaitu, perlu ada nilai di sini, tetapi ia belum ditakrifkan lagi. Penggunaan biasa ialah:

(1) Apabila pembolehubah diisytiharkan tetapi tidak diberikan nilai, ia adalah sama dengan tidak ditentukan.
(2) Apabila memanggil fungsi, parameter yang sepatutnya disediakan tidak disediakan, dan parameter adalah sama dengan tidak ditentukan.
(3) Objek tidak mempunyai atribut yang ditetapkan, dan nilai atribut ini tidak ditentukan.
(4) Apabila fungsi tidak mengembalikan nilai, ia mengembalikan tidak ditentukan secara lalai.

var i;
i // undefined

function f(x){console.log(x)}
f() // undefined

var o = new Object();
o.p // undefined

var x = f();
x // undefined

Berikut ialah ringkasan kecil

null ialah kata kunci JavaScript yang mewakili bukan objek.

tidak ditentukan bermaksud tiada nilai, menunjukkan bahawa nilai itu tidak wujud atau belum dimulakan.

Kesamaan Perbezaan
Nilai unik jenis sendiri null ialah objek, undefined ialah perkataan terpelihara
Tiada sifat dan kaedah null ditukar kepada 0 apabila mengambil bahagian dalam operasi matematik dan undefined tidak boleh ditukar atau ditukar kepada NaN semasa operasi matematik
== dianggap sama, === dianggap tidak sama null !==undefined //true
ialah semua nilai palsu dan pembolehubah Boolean mewakili nilai yang sama

null ialah objek kosong, undefined ialah sifat tetingkap (tetapi bukan sifat objek)

  alert(typeof null) // object ; alert(typeof undefined) // undefined ;
Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn