在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变量的缘由!