以下纯属个人见解,若有更好的意见,请写下来,共同进步
发现ECMAScript中的undefined类型和null类型很有意思。。。。。他们是ECMAScript中唯一只有一个值的类型,而且一般情况下,在代码调试中,一旦提示该类型,都很让人纠结和蛋疼,所以这里就爆一下他们的内幕。。。
首先,Undefined类型和null类型都是原始类型,也就是说,声明为该类型的值为直接存放在栈中。
undefined类型的值是"undefined",为什么我没有用也是呢,因为前面表示的是类型,后面表示的是它的字面值。
null类型的值是"null",为什么我也没有用也是呢,因为前面表示的也是类型,后面表示的也是它的字面值。
下面说下变量声明:
undefined:
声明后未初始化的变量,和声明为undefined类型的变量当进行==判断的时候是相等的,进行typeof运算后,他们的类型也都是undefined,值也相同。例如:
var u1;
alert(u1==undefined)
结果:true
但是,未声明的变量和undefined类型不太一样,虽然用typeof运算出来他们都是undefined类型,例如:
alert(u2==undefined)
结果:报错,并提示u2未定义
而用alert(typeof(u2))
结果:undefined
说明:未声明的变量类型为undefined,但值并不是undefined。typeof运算只运算类型。而==运算区分类型和值,W3C说的是除了typeof运算符,其他运算符只能用于声明、定义过的变量。
W3C说undefined 实际上是从值 null 派生来的,因此 ECMAScript 把它们定义为相等的。
注意:我这里使用的undefined和null都是小写,因为在javascript中,是区分大小写的,例如:
if(NULL == undefined){
alert("相等")
}
结果:提示NULL未定义,这里把NULL当成了一个变量,而undefined是一个原始类型值,就好像number。
if(NULL == undefined){
alert("相等")
}
结果:相等。
null:
使用typeof运算null会发现结果是object,这个结果让人很不满意,如果按照正常的逻辑思维,undefined类型用typeof运算的时候就也应该是object。这里W3C说 这是JavaScript 最初实现中的一个错误,然后被 ECMAScript 沿用了。现在,null 被认为是对象的占位符。
上面说过,undefined实际上时null派生来的,这里我也有几个疑问:
1.如果这样的话,undefined类型的底层实现是不是也是object?使用==运算符运算undefined和null,结果他们是相等的,这说明他们的值和类型都是相同的。那是不是就可以直接推出undefined类型底层实现的时候,类型就是object并且值就是null?
分享到:
相关推荐
之前软件开发网发不过类似的文章JavaScript null和undefined区别分析JavaScript Undefined,Null类型和NaN值区别先说说undefined: Javascript中的变量是弱类型的(关于这个我想就不用我多解释啦), 所以声明变量的...
先说说undefined: Javascript中的变量是弱类型的, 所以声明变量的时候只需使用var关键字即可。如果是像C这样的强类型语言, 声明变量的时候如果没有指定初始值,那么会给他一个默认值,比如int变量的默认值是0。...
Number类型用于表示数值,包括整数和浮点数,但需要注意JavaScript的Number类型在处理大整数时可能会有精度问题。String类型则用于处理文本,它是不可变的,意味着一旦创建,就不能改变。Boolean类型只有两个值,...
但是另一方面,js中也有一些简单的数据类型,包括数字、字符串和布尔值、null值和undefined值,而这些不是对象。那为什么这些类型的值不是对象呢,毕竟他们也有方法。那让我们来看一下,JavaScript中对于
JavaScript有七种基本数据类型:Undefined、Null、Boolean、Number、BigInt、String和Symbol,以及一种复杂数据类型——Object。Number类型包括整数和浮点数,BigInt用于表示大整数。Boolean类型只有true和false两个...
今天在做逻辑运算符的时候遇到一个小问题一直转不过弯来,var a=(undefined&&123)||(3||5)的返回值是什么? 首先是||的返回值问题: ||的返回值会返回最早遇到非以下类型的值: NaN null undefined 0 false; 所以3||...