博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript中的null与nudefined
阅读量:4329 次
发布时间:2019-06-06

本文共 1508 字,大约阅读时间需要 5 分钟。

null和undefined

作者总结:

null在进行数字运算时可以转换成0,而undefined会被转换成NaN(历史原因);

另外用typeof检测null会返回object对象类型

注意:

 

 

 

概述

nullundefined都可以表示“没有”,含义非常相似。将一个变量赋值为undefinednull,老实说,语法效果几乎没区别。

var a = undefined;// 或者var a = null;

上面代码中,a变量分别被赋值为undefinednull,这两种写法的效果几乎等价。

if语句中,它们都会被自动转为false,相等运算符(==)甚至直接报告两者相等。

if (!undefined) {  console.log('undefined is false'); } // undefined is false if (!null) { console.log('null is false'); } // null is false undefined == null // true

上面代码说明,两者的行为是何等相似!Google公司开发的JavaScript语言的替代品Dart语言,就明确规定只有null,没有undefined

既然含义与用法都差不多,为什么要同时设置两个这样的值,这不是无端增加复杂度,令初学者困扰吗?这与历史原因有关。

1995年JavaScript诞生时,最初像Java一样,只设置了null作为表示"无"的值。根据C语言的传统,null被设计成可以自动转为0

Number(null) // 05 + null // 5

但是,JavaScript的设计者Brendan Eich,觉得这样做还不够,有两个原因。首先,null像在Java里一样,被当成一个对象。但是,JavaScript的值分成原始类型和合成类型两大类,Brendan Eich觉得表示"无"的值最好不是对象。其次,JavaScript的最初版本没有包括错误处理机制,发生数据类型不匹配时,往往是自动转换类型或者默默地失败。Brendan Eich觉得,如果null自动转为0,很不容易发现错误。

因此,Brendan Eich又设计了一个undefined。他是这样区分的:null是一个表示"无"的对象,转为数值时为0undefined是一个表示"无"的原始值,转为数值时为NaN

Number(undefined) // NaN5 + undefined // NaN

但是,这样的区分在实践中很快就被证明不可行。目前nullundefined基本是同义的,只有一些细微的差别。

null的特殊之处在于,JavaScript把它包含在对象类型(object)之中。

typeof null // "object"

上面代码表示,查询null的类型,JavaScript返回object(对象)。

这并不是说null的数据类型就是对象,而是JavaScript早期部署中的一个约定俗成,其实不完全正确,后来再想改已经太晚了,会破坏现存代码,所以一直保留至今。

注意,JavaScript的标识名区分大小写,所以undefinednull不同于UndefinedNull(或者其他仅仅大小写不同的词形),后者只是普通的变量名。

 

大部分内容引用:文/阿振_sc(简书作者)

原文链接:http://www.jianshu.com/p/4448411dec80

转载于:https://www.cnblogs.com/keepLeung/p/6849000.html

你可能感兴趣的文章
甲基化会随着年龄动态变化吗?
查看>>
文献--用测序和基因组方法研究神经性疾病
查看>>
python的多线程+GIL全局解释器锁+其他LOCK
查看>>
深浅copy Python DAY3
查看>>
python多线程+GIL
查看>>
Laravel从模型中图片的相对路径获取绝对路径
查看>>
Laravel 里最简单的CURD套路
查看>>
Laravel NPM包的使用
查看>>
Laravel-Admin图片上传时的问题
查看>>
git升级与报错问题
查看>>
Thinkphp 使用小结
查看>>
Laravel注册登陆认证API
查看>>
大文件上传不了一般有哪些原因?
查看>>
js正则先行断言,
查看>>
webstorm编写html,浏览器浏览时,端口号固定
查看>>
Kafka集群部分参数配置
查看>>
封锁阳光大学
查看>>
字典树模板
查看>>
棋盘制作
查看>>
立体图
查看>>