Dalam JavaScript, kami memiliki sesuatu yang disebut undefined . Saya mengatakan sesuatu, karena saya benar-benar tidak tahu apakah itu kelas dasar, atau variabel bawaan, atau kata kunci, atau apa pun. Saya hanya tahu bahwa itu ada di sana.
Untuk melihatnya dalam aksi, Anda cukup menulis:
undefined;
typeof undefined;
Adakah yang bisa menjelaskan kepada saya mengapa hal ini dimasukkan ke dalam JavaScript? Kami memiliki null
nilai dalam bahasa ini, jadi seharusnya tidak seperti itu null
. Dalam bahasa lain, ketika kita tidak tahu nilai properti atau variabel, kita cukup mengaturnya menjadi nol. Di sini kita bisa melakukan hal yang sama.
Bagaimana kita bisa menggunakan hal ini dalam JavaScript?
javascript
language-design
Saeed Neamati
sumber
sumber
undefined
dan kapan harus menggunakannull
Jawaban:
Ada DUA hal yang perlu Anda pahami tentang undefined ...
undefined
yang hanya dapat memiliki satu nilai .undefined
Sekarang baca yang berikut ini dengan sangat hati-hati ...
Ada begitu banyak nilai tipe
number
(10, 10.01, 1e1). Tetapi hanya ada satu nilai tipeundefined
, dan nilai itu disimpan dalam variabelundefined
. Nilai yang memiliki representasi NO literal - misalnya, nilai-nilai jumlah1
,100
,1e-1
semua literal dari jumlah jenis, tetapi nilai yang disimpan dalam variabelundefined
tidak memiliki bentuk literal.undefined
adalah variabel, hanya variabel normal, yang JavaScript nyatakan dan berikan nilai tipeundefined
dalam lingkup global. Jadi, Anda dapat melakukan semua hal berikut ...undefined
, Anda bisa menghasilkan nilai tipeundefined
dengan ekspresivoid 0
- yang satu-satunya tujuan adalah mengembalikan nilai tipeundefined
.TIDAK. Sama seperti tidak ada yang bisa menjelaskan mengapa variabel yang tidak dideklarasikan pergi ke lingkup global alih-alih lokal. Anda hanya perlu melatih diri Anda untuk menggunakannya dengan cerdas alih-alih mencoba mencari pembenaran atas keberadaannya.
Meskipun
null
bisa melakukan sesuatuundefined
, itu lebih atau kurang terkait denganobjects
daripada skalar. Memang, JavaScript menganggapnull
dirinya sebagai objek -typeof null
mengembalikan "objek".Menurut pendapat saya, intinya adalah untuk TIDAK mencoba alasan tujuan absolut dari
undefined
dannull
- dan menggunakannya dalam kode Anda secara cerdas, sehingga kode Anda dapat dibaca, dipelihara, dan dapat digunakan kembali.sumber
the bottom line is to NOT try to reason the absolute purposes of undefined and null
, tampaknya JavaScript adalah bahasa yang jauh lebih sedikit daripada menjadi bahasa yang logis dan kita harus terbiasa dengannya, seperti bereksperimen dengan dunia baru.undefined
". Sebenarnyavoid
mengevaluasi ekspresi, mengabaikan nilai kembali dan mengembalikanundefined
nilai. Adapun perbedaannya.undefined
digunakan oleh mesin JS untuk mengatakan hal ini tidak memiliki nilai.null
digunakan oleh ANDA untuk mengatakan hal ini tidak memiliki nilai. Ada perbedaan yang jelas .undefined = 100; typeof undefined;
mengembalikan "tidak terdefinisi" untuk saya, jika Anda mencoba untuk menetapkan ke nol Anda mendapatkan kesalahan. Hanya ingin mengklarifikasi untuk pembaca masa depan.Maaf untuk menjawab pertanyaan yang lebih lama tetapi alasan Anda membutuhkan keduanya tidak terdefinisi dan null adalah sederhana: dalam bahasa pengetikan bebek berbasis prototipe Anda benar - benar harus membedakan antara "objek ini tidak menentukan nilai untuk X" dan "objek ini mengatakan X adalah tidak ada / null / kosong ".
Tanpa kemampuan ini, tidak ada cara untuk berjalan di rantai prototipe dan karenanya warisan tidak dapat bekerja; Anda harus dapat menentukan bahwa obj.someProp tidak terdefinisi sehingga Anda dapat melihat obj.prototype.someProp, dan meneruskan rantai sampai Anda menemukan nilai. Jika obj.someProp kembali nol, tidak akan ada cara untuk mengetahui apakah itu benar-benar nol atau hanya berarti "lihat prototipe saya". Satu-satunya cara lain untuk mengatasi ini adalah menyuntikkan beberapa sihir kludgy di belakang layar yang mematahkan kemampuan Anda untuk membingungkan dengan rantai prototipe dan melakukan berbagai bit lain dari sihir hitam JS.
Seperti kebanyakan Javascript, ide yang tidak terdefinisi dan nol pada awalnya tampak bodoh dan bodoh, kemudian benar-benar brilian kemudian kembali ke miring dan bodoh tetapi dengan penjelasan yang masuk akal.
Bahasa seperti C # tidak akan dikompilasi jika Anda mengakses properti yang tidak ada dan bahasa dinamis lainnya sering melempar pengecualian saat runtime ketika Anda menyentuh properti yang tidak ada, artinya Anda harus menggunakan konstruksi khusus untuk mengujinya. Kelas Plus berarti ketika suatu objek dipakai Anda sudah tahu rantai pewarisannya dan semua properti yang dimilikinya - di JS saya dapat memodifikasi prototipe 15 langkah ke atas rantai dan perubahan itu akan muncul pada objek yang ada.
sumber
Ada variabel global
undefined
, yang diatur ke nilai yang tidak ditentukan. Orang jahat mungkin mengaturnya untuk sesuatu yang lain, jadi mungkin lebih baik untuk tidak mempercayainya.typeof undeclaredVariable == 'undefined'
. Mencoba membaca nilai dari variabel yang tidak jelas akan membuat Anda terlemparReferenceError
.)null
rusak secara halus, karenatypeof null == 'object'
. Saya tidak tahu mengapa kami memilikiundefined
dannull
, mungkin beberapa kecelakaan historis.sumber
Nah,
undefined
adalah nilai sentinel yang diperoleh dengan mengevaluasi sesuatu yang tidak didefinisikan sebagai lawannull
, yang merupakan nilai yang didefinisikan dengan tepat untuk mewakili apa-apa .Jadi misalnya, nilai balik suatu fungsi, yang tidak menentukan nilai balik tidak ditentukan. Nilai properti yang tidak didefinisikan pada objek tidak terdefinisi. Nilai balik dari pernyataan, yang bukan ekspresi tidak terdefinisi (meskipun Anda tidak akan melihat ini terjadi selain di konsol).
Harap dicatat, bahwa Anda dapat membuat fungsi, yang secara eksplisit mengembalikan
undefined
dan Anda dapat secara eksplisit mendefinisikan properti dengan nilaiundefined
pada objek, karena pada akhirnya itu adalah nilai yang valid. Anda akan melakukannya untuk berkomunikasi secara eksplisit, bahwa ada sesuatu yang tidak didefinisikan .Anda bisa memikirkan hubungan
undefined
dannull
karena itu antaraNaN
dan0
.sumber
undefined
adalahvoid
?void
dalam JavaScript adalah operator unary , yang mengambil argumen apa pun dan mengembalikan nilainyaundefined
.