Rumah hujung hadapan web tutorial js JavaScript中的null和undefined解析_javascript技巧

JavaScript中的null和undefined解析_javascript技巧

May 16, 2016 pm 05:54 PM
null undefined

在JavaScript开发中,被人问到:null与undefined到底有啥区别?

一时间不好回答,特别是undefined,因为这涉及到undefined的实现原理。于是,细想之后,写下本文,请各位大侠拍砖。

总所周知:null == undefined

但是:null !== undefined

那么这两者到底有啥区别呢?

请听俺娓娓道来...

null

这是一个对象,但是为空。因为是对象,所以 typeof null 返回 'object' 。

null 是 JavaScript 保留关键字。

null 参与数值运算时其值会自动转换为 0 ,因此,下列表达式计算后会得到正确的数值:

表达式:123 + null 结果值:123

表达式:123 * null 结果值:0

undefined

undefined是全局对象(window)的一个特殊属性,其值是未定义的。但 typeof undefined 返回 'undefined' 。

虽然undefined是有特殊含义的,但它确实是一个属性,而且是全局对象(window)的属性。请看下面的代码:

alert('undefined' in window); //输出:true
alert(undefined in window); //输出:true
var anObj = {};
alert('undefined' in anObj); //输出:false

从中可以看出,undefined是window对象的一个属性,但却不是anObj对象的一个属性。

注意:尽管undefined是有特殊含义的属性,但却不是JavaScript的保留关键字。

undefined参与任何数值计算时,其结果一定是NaN。

随便说一下,NaN是全局对象(window)的另一个特殊属性,Infinity也是。这些特殊属性都不是JavaScript的保留关键字!

提高undefined性能

当我们在程序中使用undefined值时,实际上使用的是window对象的undefined属性。

同样,当我们定义一个变量但未赋予其初始值,例如:

var aValue;

这时,JavaScript在所谓的预编译时会将其初始值设置为对window.undefined属性的引用,

于是,当我们将一个变量或值与undefined比较时,实际上是与window对象的undefined属性比较。这个比较过程中,JavaScript会搜索window对象名叫‘undefined'的属性,然后再比较两个操作数的引用指针是否相同。

由于window对象的属性值是非常多的,在每一次与undefined的比较中,搜索window对象的undefined属性都会花费时间。在需要频繁与undefined进行比较的函数中,这可能会是一个性能问题点。因此,在这种情况下,我们可以自行定义一个局部的undefined变量,来加快对undefined的比较速度。例如:

function anyFunc()
{
var undefined; //自定义局部undefined变量

if(x == undefined) //作用域上的引用比较

while(y != undefined) //作用域上的引用比较

};

其中,定义undefined局部变量时,其初始值会是对window.undefined属性值的引用。新定义的局部undefined变量存在与该函数的作用域上。在随后的比较操作中,JavaScript代码的书写方式没有任何的改变,但比较速度却很快。因为作用域上的变量数量会远远少于window对象的属性,搜索变量的速度会极大提高。

这就是许多前端JS框架为什么常常要自己定义一个局部undefined变量的原因!

Kenyataan Laman Web ini
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Penyelesaian kepada Notis PHP: Harta yang tidak ditentukan: Penyelesaian kepada Notis PHP: Harta yang tidak ditentukan: Jun 22, 2023 pm 02:48 PM

Semasa menulis kod dalam PHP, kami mungkin menghadapi mesej ralat "Notis: Undefinedproperty". Ralat ini bermakna kami sedang mengakses sifat yang tidak ditentukan, biasanya kerana sifat tersebut belum dimulakan dalam kod. Jadi, bagaimana untuk menyelesaikan masalah ini? Berikut ialah beberapa penyelesaian yang mungkin: Mulakan sifat Ini adalah cara paling mudah untuk menyelesaikan masalah ini. Memulakan sifat dalam kod secara eksplisit memastikan ia ditakrifkan sebelum digunakan. Contohnya: kelas

TypeError: Tidak dapat membaca sifat '$XXX' undefined dalam Vue, bagaimana untuk menanganinya? TypeError: Tidak dapat membaca sifat '$XXX' undefined dalam Vue, bagaimana untuk menanganinya? Nov 25, 2023 pm 12:14 PM

Jika anda sering menemui mesej ralat "TypeError: Cannotreadproperty'$XXX'ofundefined" semasa membangunkan dengan Vue.js, bagaimanakah anda harus menanganinya? Artikel ini menerangkan punca ralat ini dan cara membetulkannya. Punca masalah ialah apabila menggunakan Vue.js, kami sering menggunakannya untuk memanggil kaedah komponen Vue, seperti: exportdefault{data()

Apakah perbezaan antara null dan NULL dalam bahasa c Apakah perbezaan antara null dan NULL dalam bahasa c Sep 22, 2023 am 11:48 AM

Perbezaan antara null dan NULL dalam bahasa C ialah: null ialah definisi makro dalam bahasa C, biasanya digunakan untuk mewakili penunjuk nol, yang boleh digunakan untuk memulakan pembolehubah penunjuk, atau untuk menentukan sama ada penuding adalah nol dalam pernyataan bersyarat; NULL ialah definisi makro dalam bahasa C Pemalar yang dipratentukan dalam , biasanya digunakan untuk mewakili nilai nol, digunakan untuk mewakili penunjuk nol, tatasusunan penunjuk nol atau penunjuk struktur nol.

Apakah maksud undefined dan null? Apakah maksud undefined dan null? Nov 20, 2023 pm 02:39 PM

Dalam JavaScript, kedua-dua undefined dan null mewakili konsep "nothing": 1. undefined mewakili pembolehubah tidak dimulakan atau sifat tidak wujud Apabila pembolehubah diisytiharkan tetapi tiada nilai diberikan kepadanya, nilai pembolehubah adalah undefined . apabila mengakses sifat yang tidak wujud dalam objek, nilai yang dikembalikan juga tidak ditentukan;

apa yang tidak ditentukan apa yang tidak ditentukan Jul 31, 2023 pm 02:28 PM

undefined mewakili keadaan di mana nilai atau pembolehubah tidak wujud atau tidak ditentukan. Ia boleh digunakan sebagai nilai lalai untuk menentukan sama ada pembolehubah telah diberikan nilai, dan juga boleh digunakan untuk menetapkan nilai parameter lalai. Walaupun undefined mungkin mempunyai makna dan penggunaan yang berbeza dalam bahasa pengaturcaraan yang berbeza, memahami konsep undefined boleh membantu kita memahami dan menulis program dengan lebih baik.

Bagaimana untuk menyelesaikan ralat 'undefined: path.Join' dalam golang? Bagaimana untuk menyelesaikan ralat 'undefined: path.Join' dalam golang? Jun 24, 2023 pm 01:12 PM

Dalam bahasa Go, pakej laluan adalah salah satu alat penting untuk memproses laluan fail. Fungsi path.Join() boleh menggabungkan berbilang laluan menjadi laluan yang lengkap. Walau bagaimanapun, kadangkala anda akan menemui mesej ralat "undefined: path.Join", apakah yang perlu anda lakukan? Berikut ialah beberapa penyelesaian biasa: Semak pernyataan import Mula-mula, anda perlu mengesahkan bahawa anda telah mengimport pakej laluan dengan betul. Dalam bahasa Go, apabila mengimport pakej, anda boleh

Bila hendak menggunakan null dan undefined Bila hendak menggunakan null dan undefined Nov 13, 2023 pm 02:11 PM

Kedua-dua null dan undefined menunjukkan kekurangan nilai atau keadaan tidak ditentukan Bergantung pada senario penggunaan, terdapat beberapa prinsip panduan untuk memilih untuk menggunakan null atau undefined: 1. Apabila anda perlu menunjukkan dengan jelas bahawa pembolehubah kosong atau tidak sah, anda. boleh menggunakan null; 2. Apabila pembolehubah telah diisytiharkan tetapi belum diberikan nilai, ia akan ditetapkan kepada tidak ditentukan secara lalai 3. Apabila anda perlu menyemak sama ada pembolehubah kosong atau tidak ditentukan, gunakan pengendali kesamaan yang ketat "= ==" untuk menentukan sama ada pembolehubah itu batal atau tidak ditentukan. .

Apakah perbezaan antara null dan undefined Apakah perbezaan antara null dan undefined Nov 08, 2023 pm 04:43 PM

Perbezaan antara null dan undefined ialah: 1. Makna semantik 2. Senario penggunaan 3. Perbandingan dengan nilai-nilai lain 5. Hubungan dengan parameter fungsi; . Prestasi dalam siri JSON 9. Hubungan dengan jenis. Pengenalan terperinci: 1. Makna semantik, null biasanya bermaksud mengetahui bahawa pembolehubah ini tidak akan mempunyai sebarang nilai objek yang sah, manakala undefined biasanya bermaksud bahawa pembolehubah belum diberikan nilai, atau objek tidak mempunyai atribut ini 2. Senario penggunaan , dsb.

See all articles