ECMAScript知Javascript__理解undefined和null

 

来周边的答应:

实际上在 ECMAScript 的原始类型中,是出Undefined 和 Null 类型的。
这简单栽类型且分别对应了属自己之绝无仅有专用值,即undefined 和 null。
值 undefined 实际上是自从值 null 派生来的,因此 ECMAScript
把它们定义也当的,通过下列代码可以作证就等同定论:
alert(undefined == null); //true

尽管就片独价值等,但它们的含义不同。

undefined 是声称了变量但非对该初始化时赋予该变量的价,null
则用于表示并未有的靶子。如果函数或艺术要返回的凡目标,那么找不顶拖欠对象时,返回的常备是
null。

所以alert(undefined===null);//false

 

说实话,我从来不扣明白,为什么undefined会继承null,即然是继承那为什么undefined!==null,还发出无初始化的变量和函数返回的对象非存里面来什么分别,问题种种,让人死无认。

 

探望内存是怎说的:

Udefined代表没有赋值的主导数据类。

Null代表没有赋值的援数据类型。

我们来拘禁一样段落代码:

1
2
3
4
5
6
7
8
var age;
var id = 100;
var div02 = document.getElementById("div02");//注:div02是不存在的
var div01 = document.getElementById("div01");//注:div01存在
alert(id);//100
alert(age);//undefined
alert(div02);//null
alert(div01);//object

再也来拘禁一下内存的状况:

ECMAScript 1

釜底抽薪第一只问题:为什么undefine继承自null

每当Javascript中,基本数据类且有一个不如对应之援数据类型,number
Number,string String,boolean
Boolean…,他们所有完全相同的行,并且相互会产生自动拆箱与装箱的操作。在内存分析一温情遭遇已经讲述了主导数据列放在栈内存中的意思,
由此这曹好汲取一个浮泛的结论:基本数据类是针对性诺引用数据类型的子类,只不过是为了提高效率,将其在栈内存中而已,对应之Undefined代表无
值的着力项目,Null代表无值的援类型,那必然就好生产undefined继承null。

化解第二独问题:为什么undefined==null

 推出来的答案undefined继承自null,内存告诉我们的答案他们都处在栈中

化解第三独问题:为什么undefined!==null

内存告诉我们,它们的意思确实是未均等的,老话一句:Udefined代表没有赋值的主干数据类,Null代表没有赋值的援数据类型。他们的内存图有十分十分之界别

解决额外的题材:null是处理引用的,为什么null处在栈内存中,而不是积内存中

答案一样的简便,效率!有必不可少当栈中分配一片额外的内存去指向堆着之null吗!

额外的抱:

当我们而切断与目标的联系,但同时连无思叫变量赋于其他的值,那么我们而了置null,如var
obj = new Object();obj=null;

 

局部关于undefined和null的行

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

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

typeof null 返回object,因为null代表是无值的援。

 

undefined是大局对象(window)的一个突出性质,其值为Undefined类型的专用值undefined

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

 当声明的变量未初始化时,该变量的默认值是undefined,但是undefined并不同为无定义之价。Typeof运算符无法区分这半种植价值

故此于变量是否是的论断操作是透过if(typeof var == ‘undefined’){
//code here }
来拓展判断的,这样既完全配合未定义(undefined)未初始化(uninitialized)有数栽状况的

 

哈哈,当您站于内存的万丈的剖析问题的时候,如此抽象的物有矣事实上的表现,一切变得简单起来!

 

安判定一个变量是否留存,当
(1)变量声明非定义
(2)变量为声明
(3)变量声明,并为该赋值为undefined时候(不是字符串“undefined”)

 

undefined以及参数判断

我们实践来拘禁一个粗略的函数:

 

1
2
3
4
5
6
function bool(val){
       if(typeof val == 'undefined'){
            return true;
        }
        return !!val;
}

以此函数有问题呢?有,因为typeof返回undefined值有半点栽可能,一种植是传上的即是undefined,还有一样种是尚未传值。

 

1
2
alert(bool(undefined));//true
alert(bool());//true

 

不行明白,bool(undefined)返回了非是咱所愿意的false.怎么解决此问题啊?

 

1
2
3
4
5
6
function bool(val){
    if(arguments.length !==0){
        return !!val;
    }
    return true;   
}

咱们通过arguments参数长度来判定是否传递了参数,从而区分函数传递的参数是undefined,还是向无纵从来不传值!