理解Javascript_02_理解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代表没有赋值的引用数据类型。
我们来看一段代码:
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
再来看一下内存的情况:
解决第一个问题:为什么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)两种情况的
哈哈,当你站在内存的高度的分析问题的时候,如此抽象的东西有了实际的表现,一切变得简单起来!
-----------------------------更新 2010/11/01 --------------------------------------------
undefined与参数判断
我们行来看一个简单的函数:
function bool(val){if(typeof val == 'undefined'){return true;}return !!val;
}
这个函数有问题吗?有,因为typeof返回undefined值有两种可能,一种是传进来的就是undefined,还有一种是没有传值。
alert(bool(undefined));//true
alert(bool());//true
很明显,bool(undefined)返回了不是我们所期望的false.怎么解决这个问题呢?
function bool(val){if(arguments.length !==0){return !!val;}return true;
}
我们通过arguments参数长度来判断是否传递了参数,从而区分函数传递的参数是undefined,还是根本不就没有传值!
转载于:https://www.cnblogs.com/fool/archive/2010/10/07/1845253.html
理解Javascript_02_理解undefined和null相关推荐
- javascript中not defined、undefined、null以及NaN的区别
[ 前言 ] 从踏入IT行业开始,我就发现技术人员写博客很有必要.如果不写博客,时间久了就像好比天天在外面建房子的人,没有一个自己的房子一样.不管学习紧不紧,工作忙不忙,多动手进行梳理总结,一方面是为 ...
- JavaScript:undefined And null差异
班吃饭的时候,同事偶然问了一个问题:undefined和null究竟有什么差别?无法回答,回去查阅相关文档,算了有了一个了解,做相关的总结.在開始之前,请看例如以下代码,算是抛出这个问题: conso ...
- undefined 和 null 有什么区别?
在理解undefined和null之间的差异之前,我们先来看看它们的相似类. 它们属于 JavaScript 的 7 种基本类型. let primitiveTypes = ['string','nu ...
- 下班前几分钟,我彻底弄懂了 undefined 和 null 的区别
目录 前言 一.基本概念 1.undefined 2.null 二.简单区别 三.表现形式 1.typeof 2.== 与 === 3.Object.prototype.toString.call 4 ...
- [JS] undefined、null、ReferenceError的区别、变量作用域问题
undefined.null.ReferenceError的区别 null表示"没有对象",即该处不应该有值. 典型用法是: (1) 作为函数的参数,表示该函数的参数不是对象. ( ...
- JS 中如何判断 undefined 和 null
为什么80%的码农都做不了架构师?>>> JS 中如何判断 undefined JavaScript 中有两个特殊数据类型:undefined 和 null,下节介绍了 nul ...
- undefined 和null的区别?
null是一个表示"无"的对象,转为数值时为0:undefined是一个表示"无"的原始值,转为数值时为NaN. undefined: (1)变量被声明了,但没 ...
- Undefined、Null区别渗透
Undefined 类型表示未定义,它的类型只有一个值,就是 undefined.任何变量在赋值前是 Undefined 类型.值为 undefined,一般我们可以用全局变量 undefined(就 ...
- undefined和null
undefined == null +null = 0; +undefined = NaN: 沿袭C语言的语法+null=0 typeof undefined === undefined; typeo ...
最新文章
- 14PS中的切图基本操作
- linux下创建新用户以及删除
- tcpdump抓包对性能的影响
- asp.net中防止攻击的方法
- 蓝牙模块与电脑无线通信--AD测量大电压
- c语言学习题,C语言学习题目
- python(1):数据类型/string/list/dict/set等
- 利用CGLib实现动态代理实现Spring的AOP
- (原创总结) Quartus II 的在线调试方法
- MyEclipse2015Stable2.0安装破解
- Linux里怎么进行路由跟踪,[Linux] traceroute 路由跟踪指令用例
- css线条伸缩_CSS3弹性伸缩布局之box布局
- 华为云技术开放日(第三季)话题介绍和直播群入口
- linux下的vconfig配置_Linux系统下安装配置-OpenLDAP-phpLDAPadmin
- SQLSERVER:sqlserver2008r2安装好后,自动提示功能不可以使用
- 重磅:GB/T 35273-2020《信息安全技术个人信息安全规范》最新解读
- 51.la申请免费统计代码
- git clone报错warning:Clone succeeded,but checkout failed
- linux脚本date命令,Shell之date命令用法
- 市场调查——定性研究方法