`
percy30856
  • 浏览: 136267 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类
最新评论

说说 javascript undefined类型

阅读更多

以下纯属个人见解,若有更好的意见,请写下来,共同进步

 

发现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中的undefined 与 null 的区别 补充篇

    之前软件开发网发不过类似的文章JavaScript null和undefined区别分析JavaScript Undefined,Null类型和NaN值区别先说说undefined: Javascript中的变量是弱类型的(关于这个我想就不用我多解释啦), 所以声明变量的...

    JavaScript的null和undefined区别示例介绍

    先说说undefined: Javascript中的变量是弱类型的, 所以声明变量的时候只需使用var关键字即可。如果是像C这样的强类型语言, 声明变量的时候如果没有指定初始值,那么会给他一个默认值,比如int变量的默认值是0。...

    1qasdasdsadas

    Number类型用于表示数值,包括整数和浮点数,但需要注意JavaScript的Number类型在处理大整数时可能会有精度问题。String类型则用于处理文本,它是不可变的,意味着一旦创建,就不能改变。Boolean类型只有两个值,...

    JavaScript 对象、函数和继承

    但是另一方面,js中也有一些简单的数据类型,包括数字、字符串和布尔值、null值和undefined值,而这些不是对象。那为什么这些类型的值不是对象呢,毕竟他们也有方法。那让我们来看一下,JavaScript中对于

    javascript-tcg-section-2-basics-variables-data-types-operators-and-functions

    JavaScript有七种基本数据类型:Undefined、Null、Boolean、Number、BigInt、String和Symbol,以及一种复杂数据类型——Object。Number类型包括整数和浮点数,BigInt用于表示大整数。Boolean类型只有true和false两个...

    老生常谈javascript中逻辑运算符&&和||的返回值问题

    今天在做逻辑运算符的时候遇到一个小问题一直转不过弯来,var a=(undefined&&123)||(3||5)的返回值是什么? 首先是||的返回值问题: ||的返回值会返回最早遇到非以下类型的值: NaN null undefined 0 false; 所以3||...

Global site tag (gtag.js) - Google Analytics