Saya selalu berpikir: nullapakah Anda mengaturnya menjadi kosong, undefineditu kosong karena belum disetel. Atau nullkosong sengaja, sementara undefinedmasih kosong. Pada dasarnya itu menunjukkan niat.
NaN. Lihat diri mu sendiri. console.log (null-undefined). Perbedaan antara nol dan tidak terdefinisi adalah NaN. (Perhatikan bahwa ini adalah upaya humor, sebelum Anda memecat saya karena salah paham pertanyaan.)
Ivan
Jawaban:
1040
Dalam JavaScript, undefinedberarti suatu variabel telah dideklarasikan tetapi belum diberi nilai, seperti:
Dari contoh-contoh sebelumnya, jelas bahwa undefineddan nullada dua tipe berbeda: undefinedadalah tipe itu sendiri (tidak terdefinisi) sedangkan nullobjek.
Kutipan dari buku Professional JS For Web Developers (Wrox): "Anda mungkin bertanya-tanya mengapa typeof operator mengembalikan 'objek' untuk nilai yang nol. Ini sebenarnya kesalahan dalam implementasi JavaScript asli yang kemudian disalin dalam ECMAScript. Hari ini , dirasionalisasi bahwa null dianggap sebagai pengganti untuk suatu objek, meskipun, secara teknis, itu adalah nilai primitif. "
Kapten Sensible
34
variabel mungkin juga tidak didefinisikan sama sekali. misalnya: console.log (typeof (abc)); undefined
Nir O.
19
Komentar dari Nir O. sangat penting. Jika saya ingin memiliki variabel yang tidak memiliki nilai di awal, saya menulis "... = null", misalnya "myvar = null". Dengan cara ini - ketika saya salah ketik "if (myxar == null) {...}" - blok if tidak dieksekusi. Saya tidak memiliki keunggulan ini dengan undefined: myvar = undefined; myvar = 4; if (typeof myxar == "undefined") {...}
Wolfgang Adamec
11
@ Wolfgang Adamec, pemrograman bebas kesalahan bukan tentang kesalahan ketik.
Jorge Fuentes González
12
jadi pada dasarnya nilai nol berarti suatu variabel telah secara eksplisit ditetapkan sebagai (tidak ada nilai = nol) atau telah diinisialisasi dan didefinisikan sebagai tidak ada. Sedangkan artinya tidak terdefinisi. mungkin tidak pernah diinisialisasi atau jika tidak pernah ditentukan.
Nilai tidak terdefinisi adalah nilai primitif yang digunakan ketika suatu variabel belum diberi nilai.
Nilai nol adalah nilai primitif yang mewakili referensi nol, kosong, atau tidak ada.
Ketika Anda mendeklarasikan variabel melalui var dan tidak memberikan nilai, itu akan memiliki nilai yang tidak terdefinisi. Dengan sendirinya, jika Anda mencoba untuk WScript.Echo () atau mengingatkan () nilai ini, Anda tidak akan melihat apa pun. Namun, jika Anda menambahkan string kosong ke sana maka tiba-tiba itu akan muncul:
var s;WScript.Echo(s);WScript.Echo(""+ s);
Anda dapat mendeklarasikan variabel, setel ke nol, dan perilaku itu identik kecuali bahwa Anda akan melihat "null" dicetak versus "tidak terdefinisi". Ini memang perbedaan kecil.
Anda bahkan dapat membandingkan variabel yang tidak ditentukan ke nol atau sebaliknya, dan kondisinya akan benar:
undefined==nullnull==undefined
Namun, mereka dianggap dua jenis yang berbeda. Sementara undefined adalah tipe untuk dirinya sendiri, null dianggap sebagai nilai objek khusus. Anda bisa melihat ini dengan menggunakan typeof () yang mengembalikan string yang mewakili tipe umum variabel:
var a;WScript.Echo(typeof(a));var b =null;WScript.Echo(typeof(b));
Menjalankan skrip di atas akan menghasilkan output berikut:
undefined
object
Terlepas dari jenis mereka yang berbeda, mereka masih akan bertindak sama jika Anda mencoba mengakses anggota dari salah satu dari mereka, misalnya yang mengatakan mereka akan melemparkan pengecualian. Dengan WSH Anda akan melihat "varname 'yang ditakuti adalah nol atau bukan objek" dan itu jika Anda beruntung (tapi itu topik untuk artikel lain).
Anda dapat secara eksplisit mengatur variabel menjadi tidak terdefinisi, tetapi saya sangat menyarankan untuk tidak melakukannya. Saya sarankan hanya mengatur variabel ke nol dan meninggalkan nilai yang tidak ditentukan untuk hal-hal yang Anda lupa atur. Pada saat yang sama, saya sangat menyarankan Anda untuk selalu mengatur setiap variabel. JavaScript memiliki rantai cakupan yang berbeda dari bahasa gaya C, dengan mudah membingungkan programmer veteran, dan mengatur variabel ke null adalah cara terbaik untuk mencegah bug berdasarkannya.
Contoh lain di mana Anda akan melihat pop up tidak terdefinisi adalah ketika menggunakan operator hapus. Kita dari dunia C mungkin salah menafsirkan ini sebagai menghancurkan objek, tetapi tidak demikian. Apa yang dilakukan operasi ini adalah menghapus subskrip dari Array atau anggota dari Object. Untuk Array itu tidak mempengaruhi panjang, melainkan bahwa subskrip sekarang dianggap tidak terdefinisi.
var a =['a','b','c'];delete a[1];for(var i =0; i < a.length; i++)WScript.Echo((i+".) "+a[i]);
Hasil dari skrip di atas adalah:
0.) a
1.)undefined2.) c
Anda juga akan mendapatkan pengembalian yang tidak terdefinisi saat membaca subskrip atau anggota yang tidak pernah ada.
Perbedaan antara nol dan tidak terdefinisi adalah: JavaScript tidak akan pernah mengatur apa pun menjadi nol, itulah yang biasanya kami lakukan. Meskipun kita dapat mengatur variabel ke undefined, kita lebih suka null karena itu bukan sesuatu yang pernah dilakukan untuk kita. Ketika Anda melakukan debug, ini berarti bahwa apa pun yang disetel ke nol adalah pekerjaan Anda sendiri dan bukan JavaScript. Di luar itu, dua nilai khusus ini hampir setara.
Benar-benar jawaban yang bagus. Tetapi hanya untuk menunjukkan, ketika Anda memeriksa "undefined == null" pemeriksaan jenis tidak ketat. Karenanya ia mengembalikan "benar". Jika Anda menandai "undefined === null", itu akan mengembalikan false.
wOlVeRiNe
3
Perlu dicatat bahwa sementara komentar ini benar di '11, dengan munculnya params fungsi opsional, munculnya sistem pengecekan tipe seperti Flow, dan merebaknya React (semua yang memperlakukan tidak terdefinisi dan nol sangat berbeda), kearifan lama dari umumnya menggunakan null daripada tidak didefinisikan tidak lagi berlaku begitu ketat. undefined sebenarnya lebih disukai daripada null dalam banyak kasus di mana Anda ingin secara eksplisit menggunakan nilai default (misalnya untuk param opsional atau opsional React prop).
0x24a537r9
66
(menambahkan karakter karena kekurangan karakter, jadi saya diizinkan memposting ini.)
Bisakah Anda memasukkan atribusi untuk sumber gambar?
Vega
1
@Vega Sayangnya tidak, saya tidak ingat dari mana saya mendapatkannya selain dari suatu tempat di imgur.com dan itu mungkin dari sebuah repost, bukan dari sumber ASLI. Bahkan tautan yang disematkan di sini tidak memberikan petunjuk siapa pun yang memposting versi ini, jadi saya juga tidak bisa mencarinya.
Sebastian Norr
1
ha ha ha ... ini adalah penjelasan terbaik yang pernah saya lihat! keren!
Akbar Mirsiddikov
36
null adalah kata kunci khusus yang menunjukkan tidak adanya nilai.
pikirkan itu sebagai nilai, seperti:
"Foo" adalah string,
benar adalah boolean,
1234 adalah angka,
null tidak terdefinisi.
properti tidak terdefinisi menunjukkan bahwa variabel belum diberi nilai termasuk null juga. Suka
var foo;
variabel kosong yang didefinisikan adalah nulltipe dataundefined
Keduanya mewakili nilai variabel tanpa nilai
DANnull tidak mewakili string yang tidak memiliki nilai - string kosong-
Suka
var a ='';
console.log(typeof a);// string
console.log(a ==null);//false
console.log(a ==undefined);// false
Sekarang jika
var a;
console.log(a ==null);//true
console.log(a ==undefined);//true
TAPI
var a;
console.log(a ===null);//false
console.log(a ===undefined);// true
SO masing-masing memiliki cara sendiri untuk digunakan
undefined menggunakannya untuk membandingkan tipe data variabel
null gunakan untuk mengosongkan nilai variabel
var a ='javascript';
a =null;// will change the type of variable "a" from string to object
null juga merupakan tipe data. Baik undefined dan null adalah tipe dan nilai data
danwellman
9
nullBenar-benar sebuah tipe data: msdn.microsoft.com/en-us/library/ie/7wkd9z69(v=vs.94).aspx. Fakta bahwa typeof nullpengembalian objectadalah bug yang dikenal dan didokumentasikan dalam versi awal ECMAScript yang tetap untuk kompatibilitas ke belakang. Tautan yang sebenarnya Anda posting di komentar Anda mengatakan di tengah halaman "typeof null // object (bug dalam ECMAScript, seharusnya null)"! Jadi tolong, tunjukkan upaya pencarian sebelum mengomentari down-
vote
1
Definisi bertentangan: "tidak adanya nilai" vs "belum diberi nilai". Bukankah itu sama?
Zon
3
Saya tidak setuju dengan jawaban ini. Null dan tidak terdefinisi adalah tipe data yang berbeda. null adalah tipe null dan undefined adalah tipe undefined. Hanya ketika menggunakan operator yang benar (==) kita dapat melihat bahwa javascript mengatakan itu benar tetapi perbandingan yang ketat (===) menghasilkan false.
alaboudi
19
null : tidak adanya nilai untuk variabel; undefined : tidak adanya variabel itu sendiri;
Variabel ..where adalah nama simbol yang terkait dengan nilai.
JS bisa berbaik hati secara implisit init variabel yang baru dideklarasikan dengan nol , tetapi tidak.
var a = {}; a.n = undefined;' then ..a.hasOwnProperty ('n') == true` ... jadi mengatakan tidak adanya variabel itu sendiri tidak benar lagi
Muhammad Umer
17
Silakan baca yang berikut dengan seksama. Ini akan menghapus semua keraguan Anda mengenai perbedaan antara nol dan tidak terdefinisi dalam JavaScript. Anda juga dapat menggunakan fungsi utilitas yang diberikan di bawah ini untuk secara tepat menentukan jenis.
Dalam JavaScript kita dapat memiliki tipe variabel berikut.
Variabel yang tidak dideklarasikan
Variabel yang Dideklarasikan tetapi Tidak Ditugaskan
Variabel yang ditetapkan dengan literal tidak terdefinisi
Variabel yang ditetapkan dengan null literal
Variabel ditugaskan dengan apa pun selain yang tidak terdefinisi atau nol
Berikut ini menjelaskan masing-masing kasus ini satu per satu
Variabel yang tidak dideklarasikan: Berikut ini berlaku untuk variabel yang tidak dideklarasikan
Hanya dapat diperiksa dengan typeof () yang mengembalikan string 'tidak terdefinisi'
Tidak dapat diperiksa dengan == atau === atau dengan jika atau operator kondisional ? (melempar Kesalahan Referensi)
Variabel yang Dideklarasikan tetapi Tidak Ditugaskan
typeof mengembalikan string 'tidak terdefinisi'
== periksa dengan null mengembalikan true
== periksa dengan pengembalian tidak terdefinisi true
=== periksa dengan null mengembalikan false
=== periksa dengan pengembalian tidak terdefinisi benar
jika atau operator bersyarat ? mengembalikan salah
Variabel yang ditugaskan dengan literal tidak terdefinisi : Variabel-variabel ini diperlakukan sama seperti Variabel yang Dideklarasikan Tetapi Tidak Ditugaskan .
Variabel yang ditetapkan dengan null literal
typeof mengembalikan string 'objek'
== periksa dengan null mengembalikan true
== periksa dengan pengembalian tidak terdefinisi true
=== periksa dengan null mengembalikan true
=== periksa dengan pengembalian tidak terdefinisi salah
jika atau operator bersyarat ? mengembalikan salah
Variabel ditugaskan dengan apa pun selain yang tidak terdefinisi atau nol
typeof mengembalikan salah satu dari string berikut: 'string' , 'number' , 'boolean' , 'function' , 'object' , 'simbol'
Berikut ini menyediakan algoritma untuk pemeriksaan tipe variabel yang benar:
Periksa dideklarasikan / belum ditetapkan / ditugaskan dengan terdefinisi menggunakan typeof . kembali jika string 'tidak terdefinisi' dikembalikan.
Periksa null menggunakan === . kembalikan 'null' jika benar .
Periksa jenis aktual menggunakan typeof . ketik kembali jika tidak sama dengan 'objek'
Panggil Object.prototype.toString.call (o) untuk menentukan jenis objek yang sebenarnya. Ini akan mengembalikan string tipe '[objek ObjectType]' untuk semua dibangun di Javascript atau DOM didefinisikan Objek. Untuk objek yang ditentukan pengguna mengembalikan '[objek objek]'
Anda juga dapat menggunakan fungsi utilitas berikut untuk menentukan jenis. Saat ini mendukung semua jenis ECMA 262 2017.
Anda mungkin menganggap tidak terdefinisi untuk mewakili tidak adanya nilai tingkat sistem, tidak terduga, atau seperti kesalahan dan nol untuk mewakili tingkat program, normal, atau tidak adanya nilai yang diharapkan.
Saya akan menjelaskan undefined, nulldan Uncaught ReferenceError:
1 - Uncaught ReferenceError: variabel belum dideklarasikan dalam skrip Anda, tidak ada referensi untuk varaible ini
2 - undefined: Variabel dideklarasikan tetapi tidak diinisialisasi
3 - null: Variabel dideklarasikan dan merupakan nilai kosong
null dan undefined adalah dua tipe objek berbeda yang memiliki kesamaan berikut:
keduanya hanya dapat memiliki nilai tunggal, masing-masing nol dan tidak terdefinisi ;
keduanya tidak memiliki properti atau metode dan upaya untuk membaca properti apa pun dari keduanya akan menghasilkan kesalahan run-time (untuk semua objek lainnya, Anda mendapatkan nilai yang tidak terdefinisi jika Anda mencoba membaca properti yang tidak ada);
nilai null dan undefined dianggap sama satu sama lain dan tidak ada yang lain oleh ==dan !=operator.
Kesamaan namun berakhir di sini. Untuk sekali, ada perbedaan mendasar dalam cara kata kunci null dan undefined diimplementasikan. Ini tidak jelas, tetapi perhatikan contoh berikut:
varundefined="foo";WScript.Echo(undefined);// This will print: foo
tidak terdefinisi , NaN dan Infinity hanyalah nama variabel "superglobal" yang telah diinisialisasi - mereka diinisialisasi pada saat run-time dan dapat diganti oleh variabel global atau lokal normal dengan nama yang sama.
Sekarang, mari kita coba hal yang sama dengan null :
varnull="foo";// This will cause a compile-time errorWScript.Echo(null);
Ups! null , true dan false adalah kata kunci yang dipesan - kompiler tidak akan membiarkan Anda menggunakannya sebagai nama variabel atau properti
Perbedaan lainnya adalah bahwa undefined adalah tipe primitif, sedangkan null adalah tipe objek (menunjukkan tidak adanya referensi objek). Pertimbangkan yang berikut ini:
WScript.Echo(typeoffalse);// Will print: booleanWScript.Echo(typeof0);// Will print: numberWScript.Echo(typeof"");// Will print: stringWScript.Echo(typeof{});// Will print: objectWScript.Echo(typeofundefined);// Will print: undefinedWScript.Echo(typeofnull);// (!!!) Will print: object
Juga, ada perbedaan penting dalam cara null dan tidak terdefinisi diperlakukan dalam konteks numerik:
var a;// declared but uninitialized variables hold the value undefinedWScript.Echo(a ===undefined);// Prints: -1var b =null;// the value null must be explicitly assigned WScript.Echo(b ===null);// Prints: -1WScript.Echo(a == b);// Prints: -1 (as expected)WScript.Echo(a >= b);// Prints: 0 (WTF!?)WScript.Echo(a >= a);// Prints: 0 (!!!???)WScript.Echo(isNaN(a));// Prints: -1 (a evaluates to NaN!)WScript.Echo(1*a);// Prints: -1.#IND (in Echo output this means NaN)WScript.Echo(b >= b);// Prints: -1 (as expected)WScript.Echo(isNaN(b));// Prints: 0 (b evaluates to a valid number)WScript.Echo(1*b);// Prints: 0 (b evaluates to 0)WScript.Echo(a >=0&& a <=0);// Prints: 0 (as expected)WScript.Echo(a ==0);// Prints: 0 (as expected)WScript.Echo(b >=0&& b <=0);// Prints: -1 (as expected)WScript.Echo(b ==0);// Prints: 0 (!!!)
null menjadi 0 ketika digunakan dalam ekspresi aritmatika atau perbandingan numerik - mirip dengan false , pada dasarnya hanya jenis khusus "nol". undefined , di sisi lain, adalah "tidak ada" yang benar dan menjadi NaN ("bukan angka") ketika Anda mencoba menggunakannya dalam konteks numerik.
Perhatikan bahwa nol dan tidak terdefinisi menerima perlakuan khusus dari ==dan !=operator, tetapi Anda dapat menguji kesetaraan numerik sebenarnya dari a dan b dengan ekspresi (a >= b && a <= b).
Jika Anda tahu variabel hanya berupa angka sementara semua siklus hidup, berdasarkan konvensi, Anda dapat menginisialisasi variabel tersebut ke 0(atau NaNjika 0merupakan nilai penting dalam penggunaan Anda):
Catatan: penggunaan cerdas dari nol adalah menjadi versi palsu dari suatu Obyek karena Obyek selalu true, dan karena typeof nullkembali object. Itu berarti typeof myVarObjectmengembalikan nilai yang konsisten untuk objek dan tipe null.
Semua
Jika Anda tahu suatu variabel memiliki tipe campuran (semua jenis selama semua siklus hidup), dengan konvensi, Anda dapat menginisialisasi variabel tersebut ke undefined.
Penting untuk dicatat, bahwa sementara undefineddapat berarti bahwa variabel belum dideklarasikan, tetapi tidak menjamin itu. Variabel dapat dideklarasikan sebagai var thing;dan itu akan sama dengan undefined.
Yura
6
Cara terbaik untuk memahami perbedaannya adalah dengan terlebih dahulu menjernihkan pikiran Anda tentang cara kerja JavaScript dalam dan hanya memahami perbedaan makna antara:
let supervisor ="None"// I have a supervisor named "None"let supervisor =null// I do NOT have a supervisor. It is a FACT that I do not.let supervisor =undefined// I may or may not have a supervisor. I either don't know// if I do or not, or I am choosing not to tell you. It is// irrelevant or none of your business.
Ada perbedaan makna antara ketiga kasus ini, dan JavaScript membedakan dua kasus terakhir dengan dua nilai yang berbeda, nulldan undefined. Anda bebas menggunakan nilai-nilai itu secara eksplisit untuk menyampaikan makna tersebut.
Jadi apa saja masalah spesifik JavaScript yang muncul karena dasar filosofis ini?
Variabel yang dideklarasikan tanpa penginisialisasi mendapatkan nilai undefinedkarena Anda tidak pernah mengatakan apa pun tentang nilai yang dimaksud.
let supervisor;
assert(supervisor ===undefined);
Properti objek yang belum pernah disetel dievaluasi undefined karena tidak ada yang pernah mengatakan apa pun tentang properti itu.
const dog ={ name:'Sparky', age:2};
assert(dog.breed ===undefined);
null dan undefined "mirip" satu sama lain karena Brendan Eich mengatakan demikian. Tetapi mereka secara tegas tidak setara satu sama lain.
nulldan undefineduntungnya memiliki tipe yang berbeda. nulltermasuk tipeNull danundefined tipe Undefined. Ini ada dalam spec, tetapi Anda tidak akan pernah tahu ini karena typeofkeanehan yang tidak akan saya ulangi di sini.
Fungsi yang mencapai ujung tubuhnya tanpa pernyataan pengembalian yang eksplisit muncul undefinedkarena Anda tidak tahu apa-apa tentang apa yang dikembalikan.
Ngomong-ngomong, ada bentuk lain dari "ketiadaan" dalam JavaScript (ada baiknya mempelajari Filsafat ....)
NaN
Menggunakan variabel yang belum pernah dideklarasikan dan menerima a ReferenceError
Menggunakan sebuah let atauconst variabel lokal didefinisikan dalam zona mati sementara dan menerimaReferenceError
Sel kosong dalam array jarang. Ya ini bahkan tidak undefineddibandingkan ===dengan yang tidak terdefinisi.
$ node
>const a =[1,undefined,2]>const b =[1,,2]> a
[1,undefined,2]> b
[1,<1 empty item>,2]
Jawaban Terbaik! Sebagian besar jawaban mengabaikan fakta bahwa Anda dapat mendefinisikan nilai variabel sebagaiundefined , seperti dalam let supervisor = undefinedkasus ini.
J. Bruni
Terima kasih, dan ya, kesalahpahaman itu bahwa sesuatu undefinedhanya jika belum dinyatakan atau belum diberi nilai begitu merajalela dan sangat sulit untuk disampaikan kepada orang-orang (meskipun saya terus berusaha). Begitu banyak orang sampah JavaScript untuk memiliki kedua nulldan undefinedtapi nilai-nilai ini tidak memiliki makna yang sama sekali berbeda dan untuk sebagian besar mereka bekerja dengan baik dengan makna yang dimaksudkan mereka (IMHO tentu saja).
Ray Toal
5
Di JavasSript ada 5 tipe data primitif String, Number, Boolean, null, dan undefined. Saya akan mencoba menjelaskan dengan beberapa contoh sederhana
katakanlah kita memiliki fungsi sederhana
function test(a){if(a ==null){
alert("a is null");}else{
alert("The value of a is "+ a);}}
juga dalam fungsi di atas jika (a == null) sama seperti if (! a)
sekarang ketika kita memanggil fungsi ini tanpa melewati parameter a
test(); it will alert "a is null";
test(4); it will alert "The value of a is "+4;
juga
var a;
alert(typeof a);
ini akan memberikan yang tidak terdefinisi; kami telah mendeklarasikan variabel tetapi kami belum menetapkan nilai apa pun untuk variabel ini; tetapi jika kita menulis
var a =null;
alert(typeof a); will give alert as object
jadi null adalah objek. dengan cara kami telah menetapkan nilai nol ke 'a'
Untuk undefinedjenis, ada satu dan hanya satu nilai: undefined.
Untuk nulljenis, ada satu dan hanya satu nilai: null.
Jadi untuk keduanya, labelnya adalah jenis dan nilainya.
Perbedaan di antara mereka. Sebagai contoh:
null adalah nilai kosong
undefined adalah nilai yang hilang
Atau:
undefined belum memiliki nilai
null punya nilai dan tidak lagi
Sebenarnya, nullini adalah kata kunci khusus , bukan pengidentifikasi, dan dengan demikian Anda tidak dapat memperlakukannya sebagai variabel untuk ditugaskan.
Namun, undefinedmerupakan pengidentifikasi . Namun dalam non-strictmode dan strictmode, Anda dapat membuat variabel lokal dari nama yang tidak ditentukan. Tetapi ini adalah satu ide yang mengerikan!
function foo(){undefined=2;// bad idea!}
foo();function foo(){"use strict";undefined=2;// TypeError!}
foo();
Ketika Anda mendeklarasikan variabel dalam javascript, itu diberi nilai undefined. Ini berarti variabel tidak tersentuh dan dapat diberi nilai apa pun di masa depan. Ini juga menyiratkan bahwa Anda tidak tahu nilai yang variabel ini akan pegang pada saat deklarasi.
Sekarang Anda dapat menetapkan variabel secara eksplisit null. Ini berarti bahwa variabel tidak memiliki nilai apa pun. Misalnya - Beberapa orang tidak memiliki nama tengah. Jadi dalam kasus seperti itu lebih baik untuk menetapkan nilai nol ke variabel middlename objek seseorang.
Sekarang anggaplah seseorang sedang mengakses variabel middlename dari objek orang Anda dan ia memiliki nilai undefined. Dia tidak akan tahu jika pengembang lupa menginisialisasi variabel ini atau jika tidak memiliki nilai. Jika memiliki nilai null, maka pengguna dapat dengan mudah menyimpulkan bahwa middlename tidak memiliki nilai apa pun dan itu bukan variabel yang tidak tersentuh.
properti objek tidak terdefinisi juga tidak terdefinisi. Misalnya "x" tidak didefinisikan pada objek c dan jika Anda mencoba mengakses cx, itu akan kembali tidak terdefinisi.
Secara umum kami menetapkan null untuk variabel yang tidak ditentukan.
Per artikel menyeluruh Ryan Morr tentang hal ini ...
"Secara umum, jika Anda perlu menetapkan nilai-tidak ke variabel atau properti, meneruskannya ke suatu fungsi, atau mengembalikannya dari suatu fungsi, null hampir selalu merupakan pilihan terbaik. Sederhananya, JavaScript menggunakan undefined dan programmer harus gunakan null. "
Baik Null maupun undefined dalam JavaScript menunjukkan tidak adanya nilai.
var a =null;//variable assigned null valuevar b;// undefined
Terlepas dari kenyataan keduanya ada karena tidak adanya nilai tetapi: Undefined sebenarnya berarti variabel tidak diinisialisasi. Fungsi yang tidak mengembalikan apa pun dan parameter fungsi yang tidak diberi nilai, nilai yang tidak ditentukan dikembalikan. Gunakan operator kesetaraan yang ketat === untuk membedakan antara nol dan tidak terdefinisi.
OK, kita mungkin bingung ketika kita mendengar tentang , nulldan undefinedmari kita mulai dengan sederhana, mereka berdua palsu dan mirip dalam banyak hal, tetapi bagian aneh dari JavaScript, membuat mereka beberapa perbedaan yang signifikan, misalnya, typeofnull adalah 'object'sementara typeofundefined adalah 'undefined'.
Sebagai typeof mengembalikan undefined, undefined adalah tipe dimana null adalah inisialisasi menunjukkan variabel poin ke objek (hampir semua yang ada di Javascript adalah objek).
Dalam javascript semua variabel disimpan sebagai pasangan nilai kunci. Setiap variabel disimpan sebagai variable_name: variable_value / referensi .
tidak terdefinisi berarti suatu variabel telah diberi ruang dalam memori, tetapi tidak ada nilai yang diberikan padanya. Sebagai praktik terbaik, Anda tidak boleh menggunakan jenis ini sebagai tugas.
Dalam hal itu bagaimana menunjukkan ketika Anda ingin variabel menjadi tanpa nilai pada titik selanjutnya dalam kode? Anda dapat menggunakan tipe
nol , yang juga merupakan tipe yang digunakan untuk mendefinisikan hal yang sama, tidak adanya nilai, tetapi tidak sama dengan tidak terdefinisi, karena dalam hal ini Anda benar-benar memiliki nilai dalam memori. Nilai itu adalah nol
Keduanya serupa tetapi penggunaan dan artinya berbeda.
Saya ingin menambahkan perbedaan yang sangat halus antara nulldan undefinedmana yang baik untuk diketahui ketika Anda mencoba mempelajari JavaScript Vanilla (JS) dari awal:
nulladalah kata kunci yang dilindungi undang-undang di JS sementara undefinedadalah variabel pada objek global dari lingkungan run-time Anda berada.
Saat menulis kode, perbedaan ini tidak dapat diidentifikasi karena keduanya nulldan undefinedselalu digunakan dalam RHS dari pernyataan JavaScript. Tetapi ketika Anda menggunakannya dalam LHS ekspresi maka Anda dapat mengamati perbedaan ini dengan mudah. Jadi JS interpreter menafsirkan kode di bawah ini sebagai kesalahan:
varnull='foo'
Ini memberi kesalahan di bawah ini:
Uncaught SyntaxError: Token tak terduga nol
Sementara kode di bawah ini berjalan dengan sukses walaupun saya tidak akan merekomendasikan melakukannya di kehidupan nyata:
varundefined='bar'
Ini berfungsi karena undefinedmerupakan variabel pada objek global (objek jendela browser jika JS sisi klien)
undefined='bar'tidak benar-benar memberikan nilai apa pun undefined(yang tidak dapat diubah), hanya saja tidak menimbulkan kesalahan.
Dmitri Zaitsev
1
Perbedaan antara undefineddan nullminimal, tetapi ada perbedaan. Variabel yang nilainya undefinedbelum pernah diinisialisasi. Variabel yang nilainya nullsecara eksplisit diberi nilai null, yang berarti bahwa variabel tersebut secara eksplisit diatur tidak memiliki nilai. Jika Anda membandingkan undefineddan nulldengan menggunakan null==undefinedekspresi, mereka akan sama.
Jawaban ini menyesatkan ... lihat diskusi dalam jawaban yang diterima. Intinya - null==undefinedadalah truehanya karena casting implisit (atau istilah setara dalam JS). Jelas, null===undefinedini falsekarena menggunakan ketika Anda menggunakannya ===membandingkan jenis juga.
guyarad
1
Pada dasarnya, Undefined adalah variabel global yang dibuat javascript pada saat dijalankan apakah null berarti bahwa tidak ada nilai yang ditetapkan ke variabel (sebenarnya null itu sendiri merupakan objek).
Mari kita ambil contoh:
var x;//we declared a variable x, but no value has been assigned to it.
document.write(x)//let's print the variable x
Tidak terdefinisi, itulah yang akan Anda dapatkan sebagai output.
Sekarang,
x=5;
y=null;
z=x+y;
dan Anda akan mendapatkan 5 sebagai output. Itulah perbedaan utama antara Undefined dan null
null - Ini adalah nilai penugasan, yang digunakan dengan variabel untuk menyatakan tidak ada nilai (itu adalah objek).
undefined - Ini adalah variabel yang tidak memiliki nilai apa pun yang ditetapkan padanya, jadi JavaScript akan menetapkan yang tidak terdefinisi padanya (ini adalah tipe data).
tidak dideklarasikan - Jika suatu variabel tidak dibuat sama sekali, itu dikenal sebagai tidak dideklarasikan.
Karena properti lastName tidak ada di obj, JavaScript dengan benar mengevaluasi obj.lastName menjadi tidak terdefinisi.
Dalam kasus lain, Anda tahu bahwa suatu variabel mengharapkan untuk memegang suatu objek atau fungsi untuk mengembalikan suatu objek. Tetapi karena alasan tertentu, Anda tidak dapat membuat instance objek. Dalam kasus seperti itu, null adalah indikator bermakna dari objek yang hilang.
Misalnya, klon () adalah fungsi yang mengkloning objek JavaScript biasa. Fungsi ini diharapkan untuk mengembalikan objek:
Namun, klon () dapat dipanggil dengan argumen non-objek: 15 atau nol (atau umumnya nilai primitif, nol atau tidak terdefinisi). Dalam kasus tersebut, fungsi tidak dapat membuat klon, sehingga mengembalikan null - indikator dari objek yang hilang
typeof operator membuat perbedaan antara dua nilai:
Jika suatu variabel tidak diinisialisasi maka itu tidak terdefinisi. undefined bukan objek. Contoh: var MyName; console.log (ketik MyName);
Periksa konsol konsol di alat pengembangan, itu akan dicetak sebagai tidak terdefinisi.
null adalah objek. Jika Anda ingin beberapa variabel menjadi nol maka null digunakan. Variabel kosong ada tetapi nilainya tidak diketahui. Ini harus ditugaskan ke variabel pro gramatikal. null tidak diinisialisasi secara otomatis.
Contoh: var MyName = null; console.log (ketik MyName); Periksa csole log in alat pengembangan, itu akan menjadi objek.
null
nilai dalam JavaScript?null
apakah Anda mengaturnya menjadi kosong,undefined
itu kosong karena belum disetel. Ataunull
kosong sengaja, sementaraundefined
masih kosong. Pada dasarnya itu menunjukkan niat.Jawaban:
Dalam JavaScript,
undefined
berarti suatu variabel telah dideklarasikan tetapi belum diberi nilai, seperti:null
adalah nilai penugasan. Itu dapat ditugaskan ke variabel sebagai representasi tanpa nilai:Dari contoh-contoh sebelumnya, jelas bahwa
undefined
dannull
ada dua tipe berbeda:undefined
adalah tipe itu sendiri (tidak terdefinisi) sedangkannull
objek.dan
sumber
Saya mengambil ini dari sini
Ketika Anda mendeklarasikan variabel melalui var dan tidak memberikan nilai, itu akan memiliki nilai yang tidak terdefinisi. Dengan sendirinya, jika Anda mencoba untuk WScript.Echo () atau mengingatkan () nilai ini, Anda tidak akan melihat apa pun. Namun, jika Anda menambahkan string kosong ke sana maka tiba-tiba itu akan muncul:
Anda dapat mendeklarasikan variabel, setel ke nol, dan perilaku itu identik kecuali bahwa Anda akan melihat "null" dicetak versus "tidak terdefinisi". Ini memang perbedaan kecil.
Anda bahkan dapat membandingkan variabel yang tidak ditentukan ke nol atau sebaliknya, dan kondisinya akan benar:
Namun, mereka dianggap dua jenis yang berbeda. Sementara undefined adalah tipe untuk dirinya sendiri, null dianggap sebagai nilai objek khusus. Anda bisa melihat ini dengan menggunakan typeof () yang mengembalikan string yang mewakili tipe umum variabel:
Menjalankan skrip di atas akan menghasilkan output berikut:
Terlepas dari jenis mereka yang berbeda, mereka masih akan bertindak sama jika Anda mencoba mengakses anggota dari salah satu dari mereka, misalnya yang mengatakan mereka akan melemparkan pengecualian. Dengan WSH Anda akan melihat "varname 'yang ditakuti adalah nol atau bukan objek" dan itu jika Anda beruntung (tapi itu topik untuk artikel lain).
Anda dapat secara eksplisit mengatur variabel menjadi tidak terdefinisi, tetapi saya sangat menyarankan untuk tidak melakukannya. Saya sarankan hanya mengatur variabel ke nol dan meninggalkan nilai yang tidak ditentukan untuk hal-hal yang Anda lupa atur. Pada saat yang sama, saya sangat menyarankan Anda untuk selalu mengatur setiap variabel. JavaScript memiliki rantai cakupan yang berbeda dari bahasa gaya C, dengan mudah membingungkan programmer veteran, dan mengatur variabel ke null adalah cara terbaik untuk mencegah bug berdasarkannya.
Contoh lain di mana Anda akan melihat pop up tidak terdefinisi adalah ketika menggunakan operator hapus. Kita dari dunia C mungkin salah menafsirkan ini sebagai menghancurkan objek, tetapi tidak demikian. Apa yang dilakukan operasi ini adalah menghapus subskrip dari Array atau anggota dari Object. Untuk Array itu tidak mempengaruhi panjang, melainkan bahwa subskrip sekarang dianggap tidak terdefinisi.
Hasil dari skrip di atas adalah:
Anda juga akan mendapatkan pengembalian yang tidak terdefinisi saat membaca subskrip atau anggota yang tidak pernah ada.
Perbedaan antara nol dan tidak terdefinisi adalah: JavaScript tidak akan pernah mengatur apa pun menjadi nol, itulah yang biasanya kami lakukan. Meskipun kita dapat mengatur variabel ke undefined, kita lebih suka null karena itu bukan sesuatu yang pernah dilakukan untuk kita. Ketika Anda melakukan debug, ini berarti bahwa apa pun yang disetel ke nol adalah pekerjaan Anda sendiri dan bukan JavaScript. Di luar itu, dua nilai khusus ini hampir setara.
sumber
(menambahkan karakter karena kekurangan karakter, jadi saya diizinkan memposting ini.)
sumber
null adalah kata kunci khusus yang menunjukkan tidak adanya nilai.
pikirkan itu sebagai nilai, seperti:
properti tidak terdefinisi menunjukkan bahwa variabel belum diberi nilai termasuk null juga. Suka
variabel kosong yang didefinisikan adalah
null
tipe dataundefined
Keduanya mewakili nilai variabel tanpa nilai
DAN
null
tidak mewakili string yang tidak memiliki nilai - string kosong-Suka
Sekarang jika
TAPI
SO masing-masing memiliki cara sendiri untuk digunakan
undefined menggunakannya untuk membandingkan tipe data variabel
null gunakan untuk mengosongkan nilai variabel
sumber
null
Benar-benar sebuah tipe data: msdn.microsoft.com/en-us/library/ie/7wkd9z69(v=vs.94).aspx. Fakta bahwatypeof null
pengembalianobject
adalah bug yang dikenal dan didokumentasikan dalam versi awal ECMAScript yang tetap untuk kompatibilitas ke belakang. Tautan yang sebenarnya Anda posting di komentar Anda mengatakan di tengah halaman "typeof null // object (bug dalam ECMAScript, seharusnya null)"! Jadi tolong, tunjukkan upaya pencarian sebelum mengomentari down-null : tidak adanya nilai untuk variabel; undefined : tidak adanya variabel itu sendiri;
Variabel ..where adalah nama simbol yang terkait dengan nilai.
JS bisa berbaik hati secara implisit init variabel yang baru dideklarasikan dengan nol , tetapi tidak.
sumber
var a = {}; a.n = undefined;' then ..
a.hasOwnProperty ('n') == true` ... jadi mengatakan tidak adanya variabel itu sendiri tidak benar lagiSilakan baca yang berikut dengan seksama. Ini akan menghapus semua keraguan Anda mengenai perbedaan antara nol dan tidak terdefinisi dalam JavaScript. Anda juga dapat menggunakan fungsi utilitas yang diberikan di bawah ini untuk secara tepat menentukan jenis.
Dalam JavaScript kita dapat memiliki tipe variabel berikut.
Berikut ini menjelaskan masing-masing kasus ini satu per satu
Variabel yang tidak dideklarasikan: Berikut ini berlaku untuk variabel yang tidak dideklarasikan
Variabel yang Dideklarasikan tetapi Tidak Ditugaskan
Variabel yang ditugaskan dengan literal tidak terdefinisi : Variabel-variabel ini diperlakukan sama seperti Variabel yang Dideklarasikan Tetapi Tidak Ditugaskan .
Variabel yang ditetapkan dengan null literal
Variabel ditugaskan dengan apa pun selain yang tidak terdefinisi atau nol
Berikut ini menyediakan algoritma untuk pemeriksaan tipe variabel yang benar:
Anda juga dapat menggunakan fungsi utilitas berikut untuk menentukan jenis. Saat ini mendukung semua jenis ECMA 262 2017.
sumber
via JavaScript: Panduan Definitif
sumber
Saya akan menjelaskan
undefined
,null
danUncaught ReferenceError
:1 -
Uncaught ReferenceError
: variabel belum dideklarasikan dalam skrip Anda, tidak ada referensi untuk varaible ini2 -
undefined
: Variabel dideklarasikan tetapi tidak diinisialisasi3 -
null
: Variabel dideklarasikan dan merupakan nilai kosongsumber
Tidak terdefinisi berarti suatu variabel telah dideklarasikan tetapi tidak memiliki nilai:
Null adalah tugas:
sumber
null dan undefined adalah dua tipe objek berbeda yang memiliki kesamaan berikut:
==
dan!=
operator.Kesamaan namun berakhir di sini. Untuk sekali, ada perbedaan mendasar dalam cara kata kunci null dan undefined diimplementasikan. Ini tidak jelas, tetapi perhatikan contoh berikut:
tidak terdefinisi , NaN dan Infinity hanyalah nama variabel "superglobal" yang telah diinisialisasi - mereka diinisialisasi pada saat run-time dan dapat diganti oleh variabel global atau lokal normal dengan nama yang sama.
Sekarang, mari kita coba hal yang sama dengan null :
Ups! null , true dan false adalah kata kunci yang dipesan - kompiler tidak akan membiarkan Anda menggunakannya sebagai nama variabel atau properti
Perbedaan lainnya adalah bahwa undefined adalah tipe primitif, sedangkan null adalah tipe objek (menunjukkan tidak adanya referensi objek). Pertimbangkan yang berikut ini:
Juga, ada perbedaan penting dalam cara null dan tidak terdefinisi diperlakukan dalam konteks numerik:
null menjadi 0 ketika digunakan dalam ekspresi aritmatika atau perbandingan numerik - mirip dengan false , pada dasarnya hanya jenis khusus "nol". undefined , di sisi lain, adalah "tidak ada" yang benar dan menjadi NaN ("bukan angka") ketika Anda mencoba menggunakannya dalam konteks numerik.
Perhatikan bahwa nol dan tidak terdefinisi menerima perlakuan khusus dari
==
dan!=
operator, tetapi Anda dapat menguji kesetaraan numerik sebenarnya dari a dan b dengan ekspresi(a >= b && a <= b)
.sumber
tl; dr
Gunakan
null
untuk mengatur variabel yang Anda tahu itu adalah Object.Gunakan
undefined
untuk mengatur variabel yang tipenya tercampur.Ini adalah penggunaan saya atas 5 primitif dan tipe Objek, dan itu menjelaskan perbedaan antara «use case» dari
undefined
ataunull
.Tali
Jika Anda tahu variabel hanya berupa string sementara semua siklus hidup, berdasarkan konvensi, Anda bisa menginisialisasi variabel itu, untuk
""
:Jumlah
Jika Anda tahu variabel hanya berupa angka sementara semua siklus hidup, berdasarkan konvensi, Anda dapat menginisialisasi variabel tersebut ke
0
(atauNaN
jika0
merupakan nilai penting dalam penggunaan Anda):atau
Boolean
Jika Anda tahu variabel hanya boolean sementara semua siklus hidup, dengan konvensi, Anda bisa menginisialisasi, untuk
false
:Obyek
Jika Anda tahu bahwa variabel hanyalah Objek sementara semua siklus hidup, dengan konvensi, Anda dapat menginisialisasi variabel tersebut, untuk
null
:Catatan: penggunaan cerdas dari nol adalah menjadi versi palsu dari suatu Obyek karena Obyek selalu
true
, dan karenatypeof null
kembaliobject
. Itu berartitypeof myVarObject
mengembalikan nilai yang konsisten untuk objek dan tipe null.Semua
Jika Anda tahu suatu variabel memiliki tipe campuran (semua jenis selama semua siklus hidup), dengan konvensi, Anda dapat menginisialisasi variabel tersebut ke
undefined
.sumber
null
adalah nilai khusus yang berarti "tidak ada nilai".null
adalah objek khusus karenatypeof null
mengembalikan 'objek'.Di sisi lain,
undefined
berarti variabel belum dideklarasikan, atau belum diberi nilai.sumber
undefined
dapat berarti bahwa variabel belum dideklarasikan, tetapi tidak menjamin itu. Variabel dapat dideklarasikan sebagaivar thing;
dan itu akan sama denganundefined
.Cara terbaik untuk memahami perbedaannya adalah dengan terlebih dahulu menjernihkan pikiran Anda tentang cara kerja JavaScript dalam dan hanya memahami perbedaan makna antara:
Ada perbedaan makna antara ketiga kasus ini, dan JavaScript membedakan dua kasus terakhir dengan dua nilai yang berbeda,
null
danundefined
. Anda bebas menggunakan nilai-nilai itu secara eksplisit untuk menyampaikan makna tersebut.Jadi apa saja masalah spesifik JavaScript yang muncul karena dasar filosofis ini?
Variabel yang dideklarasikan tanpa penginisialisasi mendapatkan nilai
undefined
karena Anda tidak pernah mengatakan apa pun tentang nilai yang dimaksud.Properti objek yang belum pernah disetel dievaluasi
undefined
karena tidak ada yang pernah mengatakan apa pun tentang properti itu.null
danundefined
"mirip" satu sama lain karena Brendan Eich mengatakan demikian. Tetapi mereka secara tegas tidak setara satu sama lain.null
danundefined
untungnya memiliki tipe yang berbeda.null
termasuk tipeNull
danundefined
tipeUndefined
. Ini ada dalam spec, tetapi Anda tidak akan pernah tahu ini karenatypeof
keanehan yang tidak akan saya ulangi di sini.Fungsi yang mencapai ujung tubuhnya tanpa pernyataan pengembalian yang eksplisit muncul
undefined
karena Anda tidak tahu apa-apa tentang apa yang dikembalikan.Ngomong-ngomong, ada bentuk lain dari "ketiadaan" dalam JavaScript (ada baiknya mempelajari Filsafat ....)
NaN
ReferenceError
let
atauconst
variabel lokal didefinisikan dalam zona mati sementara dan menerimaReferenceError
Sel kosong dalam array jarang. Ya ini bahkan tidak
undefined
dibandingkan===
dengan yang tidak terdefinisi.sumber
undefined
, seperti dalamlet supervisor = undefined
kasus ini.undefined
hanya jika belum dinyatakan atau belum diberi nilai begitu merajalela dan sangat sulit untuk disampaikan kepada orang-orang (meskipun saya terus berusaha). Begitu banyak orang sampah JavaScript untuk memiliki keduanull
danundefined
tapi nilai-nilai ini tidak memiliki makna yang sama sekali berbeda dan untuk sebagian besar mereka bekerja dengan baik dengan makna yang dimaksudkan mereka (IMHO tentu saja).Di JavasSript ada 5 tipe data primitif String, Number, Boolean, null, dan undefined. Saya akan mencoba menjelaskan dengan beberapa contoh sederhana
katakanlah kita memiliki fungsi sederhana
juga dalam fungsi di atas jika (a == null) sama seperti if (! a)
sekarang ketika kita memanggil fungsi ini tanpa melewati parameter a
juga
ini akan memberikan yang tidak terdefinisi; kami telah mendeklarasikan variabel tetapi kami belum menetapkan nilai apa pun untuk variabel ini; tetapi jika kita menulis
jadi null adalah objek. dengan cara kami telah menetapkan nilai nol ke 'a'
sumber
Untuk
undefined
jenis, ada satu dan hanya satu nilai:undefined
.Untuk
null
jenis, ada satu dan hanya satu nilai:null
.Jadi untuk keduanya, labelnya adalah jenis dan nilainya.
Perbedaan di antara mereka. Sebagai contoh:
null
adalah nilai kosongundefined
adalah nilai yang hilangAtau:
undefined
belum memiliki nilainull
punya nilai dan tidak lagiSebenarnya,
null
ini adalah kata kunci khusus , bukan pengidentifikasi, dan dengan demikian Anda tidak dapat memperlakukannya sebagai variabel untuk ditugaskan.Namun,
undefined
merupakan pengidentifikasi . Namun dalamnon-strict
mode danstrict
mode, Anda dapat membuat variabel lokal dari nama yang tidak ditentukan. Tetapi ini adalah satu ide yang mengerikan!sumber
Ketika Anda mendeklarasikan variabel dalam javascript, itu diberi nilai
undefined
. Ini berarti variabel tidak tersentuh dan dapat diberi nilai apa pun di masa depan. Ini juga menyiratkan bahwa Anda tidak tahu nilai yang variabel ini akan pegang pada saat deklarasi.Sekarang Anda dapat menetapkan variabel secara eksplisit
null
. Ini berarti bahwa variabel tidak memiliki nilai apa pun. Misalnya - Beberapa orang tidak memiliki nama tengah. Jadi dalam kasus seperti itu lebih baik untuk menetapkan nilai nol ke variabel middlename objek seseorang.Sekarang anggaplah seseorang sedang mengakses variabel middlename dari objek orang Anda dan ia memiliki nilai
undefined
. Dia tidak akan tahu jika pengembang lupa menginisialisasi variabel ini atau jika tidak memiliki nilai. Jika memiliki nilainull
, maka pengguna dapat dengan mudah menyimpulkan bahwa middlename tidak memiliki nilai apa pun dan itu bukan variabel yang tidak tersentuh.sumber
null dan undefined keduanya digunakan untuk mewakili tidak adanya nilai.
a diinisialisasi dan didefinisikan.
null adalah objek dalam JavaScript
b tidak ditentukan dan tidak diinisialisasi
properti objek tidak terdefinisi juga tidak terdefinisi. Misalnya "x" tidak didefinisikan pada objek c dan jika Anda mencoba mengakses cx, itu akan kembali tidak terdefinisi.
Secara umum kami menetapkan null untuk variabel yang tidak ditentukan.
sumber
Object.prototype.toString.call(null); // "[object Null]"
Per artikel menyeluruh Ryan Morr tentang hal ini ...
"Secara umum, jika Anda perlu menetapkan nilai-tidak ke variabel atau properti, meneruskannya ke suatu fungsi, atau mengembalikannya dari suatu fungsi, null hampir selalu merupakan pilihan terbaik. Sederhananya, JavaScript menggunakan undefined dan programmer harus gunakan null. "
Lihat Menjelajahi Jurang Abadi dari Null dan Undefined
sumber
Referensi: http://www.thesstech.com/javascript/null-and-undefined
sumber
OK, kita mungkin bingung ketika kita mendengar tentang ,
null
danundefined
mari kita mulai dengan sederhana, mereka berdua palsu dan mirip dalam banyak hal, tetapi bagian aneh dari JavaScript, membuat mereka beberapa perbedaan yang signifikan, misalnya, typeofnull
adalah'object'
sementara typeofundefined
adalah'undefined'
.Tetapi jika Anda memeriksa mereka dengan
==
seperti di bawah ini, Anda melihat mereka berdua falsy :Anda juga dapat menetapkan
null
ke properti objek atau ke primitif, sementaraundefined
hanya dapat dicapai dengan tidak menetapkan apa pun.Saya membuat gambar cepat untuk menunjukkan perbedaan untuk Anda sekilas.
sumber
Sebagai typeof mengembalikan undefined, undefined adalah tipe dimana null adalah inisialisasi menunjukkan variabel poin ke objek (hampir semua yang ada di Javascript adalah objek).
sumber
Dalam javascript semua variabel disimpan sebagai pasangan nilai kunci. Setiap variabel disimpan sebagai variable_name: variable_value / referensi .
tidak terdefinisi berarti suatu variabel telah diberi ruang dalam memori, tetapi tidak ada nilai yang diberikan padanya. Sebagai praktik terbaik, Anda tidak boleh menggunakan jenis ini sebagai tugas.
Dalam hal itu bagaimana menunjukkan ketika Anda ingin variabel menjadi tanpa nilai pada titik selanjutnya dalam kode? Anda dapat menggunakan tipe nol , yang juga merupakan tipe yang digunakan untuk mendefinisikan hal yang sama, tidak adanya nilai, tetapi tidak sama dengan tidak terdefinisi, karena dalam hal ini Anda benar-benar memiliki nilai dalam memori. Nilai itu adalah nol
Keduanya serupa tetapi penggunaan dan artinya berbeda.
sumber
Saya ingin menambahkan perbedaan yang sangat halus antara
null
danundefined
mana yang baik untuk diketahui ketika Anda mencoba mempelajari JavaScript Vanilla (JS) dari awal:null
adalah kata kunci yang dilindungi undang-undang di JS sementaraundefined
adalah variabel pada objek global dari lingkungan run-time Anda berada.Saat menulis kode, perbedaan ini tidak dapat diidentifikasi karena keduanya
null
danundefined
selalu digunakan dalam RHS dari pernyataan JavaScript. Tetapi ketika Anda menggunakannya dalam LHS ekspresi maka Anda dapat mengamati perbedaan ini dengan mudah. Jadi JS interpreter menafsirkan kode di bawah ini sebagai kesalahan:Ini memberi kesalahan di bawah ini:
Sementara kode di bawah ini berjalan dengan sukses walaupun saya tidak akan merekomendasikan melakukannya di kehidupan nyata:
Ini berfungsi karena
undefined
merupakan variabel pada objek global (objek jendela browser jika JS sisi klien)sumber
undefined='bar'
tidak benar-benar memberikan nilai apa punundefined
(yang tidak dapat diubah), hanya saja tidak menimbulkan kesalahan.Perbedaan antara
undefined
dannull
minimal, tetapi ada perbedaan. Variabel yang nilainyaundefined
belum pernah diinisialisasi. Variabel yang nilainyanull
secara eksplisit diberi nilainull
, yang berarti bahwa variabel tersebut secara eksplisit diatur tidak memiliki nilai. Jika Anda membandingkanundefined
dannull
dengan menggunakannull==undefined
ekspresi, mereka akan sama.sumber
null==undefined
adalahtrue
hanya karena casting implisit (atau istilah setara dalam JS). Jelas,null===undefined
inifalse
karena menggunakan ketika Anda menggunakannya===
membandingkan jenis juga.Pada dasarnya, Undefined adalah variabel global yang dibuat javascript pada saat dijalankan apakah null berarti bahwa tidak ada nilai yang ditetapkan ke variabel (sebenarnya null itu sendiri merupakan objek).
Mari kita ambil contoh:
Tidak terdefinisi, itulah yang akan Anda dapatkan sebagai output.
Sekarang,
dan Anda akan mendapatkan 5 sebagai output. Itulah perbedaan utama antara Undefined dan null
sumber
null - Ini adalah nilai penugasan, yang digunakan dengan variabel untuk menyatakan tidak ada nilai (itu adalah objek).
undefined - Ini adalah variabel yang tidak memiliki nilai apa pun yang ditetapkan padanya, jadi JavaScript akan menetapkan yang tidak terdefinisi padanya (ini adalah tipe data).
tidak dideklarasikan - Jika suatu variabel tidak dibuat sama sekali, itu dikenal sebagai tidak dideklarasikan.
sumber
Lihat ini. Outputnya bernilai ribuan kata.
Lihat juga:
Bersulang!
sumber
isNaN(null)
kembalifalse
- yang mengejutkan saya.Kedua nilai khusus menyiratkan keadaan kosong.
Perbedaan utama adalah bahwa undefined mewakili nilai dari variabel yang belum diinisialisasi, sedangkan nol mewakili tidak disengaja suatu objek.
Dalam kasus lain, Anda tahu bahwa suatu variabel mengharapkan untuk memegang suatu objek atau fungsi untuk mengembalikan suatu objek. Tetapi karena alasan tertentu, Anda tidak dapat membuat instance objek. Dalam kasus seperti itu, null adalah indikator bermakna dari objek yang hilang.
Misalnya, klon () adalah fungsi yang mengkloning objek JavaScript biasa. Fungsi ini diharapkan untuk mengembalikan objek:
Namun, klon () dapat dipanggil dengan argumen non-objek: 15 atau nol (atau umumnya nilai primitif, nol atau tidak terdefinisi). Dalam kasus tersebut, fungsi tidak dapat membuat klon, sehingga mengembalikan null - indikator dari objek yang hilang
sumber
Selain makna yang berbeda ada perbedaan lain:
null
tetapi menghilangkanundefined
sumber
Jika suatu variabel tidak diinisialisasi maka itu tidak terdefinisi. undefined bukan objek. Contoh: var MyName; console.log (ketik MyName);
Periksa konsol konsol di alat pengembangan, itu akan dicetak sebagai tidak terdefinisi.
null adalah objek. Jika Anda ingin beberapa variabel menjadi nol maka null digunakan. Variabel kosong ada tetapi nilainya tidak diketahui. Ini harus ditugaskan ke variabel pro gramatikal. null tidak diinisialisasi secara otomatis.
Contoh: var MyName = null; console.log (ketik MyName); Periksa csole log in alat pengembangan, itu akan menjadi objek.
sumber