JS基本之undefined与null的区分剖析

在javascript开辟中,最先进修js的时刻经常疑心我的就是null和undefined的区分,所以很想总结下我对这两个的明白
进修过js的同砚都晓得:

null==undefined;
true
null!==undefined;
true

那这个究竟是怎么回事呢?

1.null
起首他是一个对象,然则是一个空对象,由因而一个对象,所以

typeof null;
"object"

null是js保存的关键字;
null在介入数值运算的时刻将自动转换成 0 ;比方:

var c = 123 + null;
c
123
var a = 188*null;
a
0

2.undefined
起首undefined是全局对象中的一个特别属性,他的值是一个未定义的,我们来看看他是不是为全局对象的属性:

alert("undefined" in window);

上述这段代码会在浏览器输出true;
但是当我们建立一个空对象的时刻:

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

undefined介入的一切数值运算,其值都邑返回 NaN

var h=123+undefined;
h;
NaN
当我们在顺序中运用undefined值时,实际上运用的是window对象的undefined属性。 
一样,当我们定义一个变量但未给予其初始值,比方:
var vaule ;
undefined
这个时刻JavaScript预编译会将其初始值的设置为 window.undefined 的援用。

因而,当我们将一个变量或值与undefined比较时,实际上是与window对象的undefined属性比较。这个比较过程当中,JavaScript会搜刮window对象名叫‘undefined’的属性,然后再比较两个操纵数的援用指针是不是雷同。
因为window对象的属性值是异常多的,在每一次与undefined的比较中,搜刮window对象的undefined属性都邑花费时 间。在须要频仍与undefined举行比较的函数中,这可能会是一个机能题目点。因而,在这类情况下,我们能够自行定义一个部分的undefined变 量,来加速对undefined的比较速率。比方:

function anyFunc() 
{ 
var undefined; //自定义部分undefined变量 
if(x == undefined){console.log(undefined)} //作用域上的援用比较 
while(y != undefined){console.log(undefined)} //作用域上的援用比较 
}; 

个中,定义undefined部分变量时,其初始值会是对window.undefined属性值的援用。新定义的部分undefined变 量存在与该函数的作用域上。在随后的比较操纵中,JavaScript代码的誊写体式格局没有任何的转变,但比较速率却很快。因为作用域上的变量数目会远远少 于window对象的属性,搜刮变量的速率会极大进步。
这就是很多前端JS框架为何经常要本身定义一个部分undefined变量的缘由!

    原文作者:李志林凡
    原文地址: https://segmentfault.com/a/1190000008605804
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞