null和undefined的区别
null和undefined的区别
在Js
中null
与undefined
是两种基本数据类型,都可以用来表示"无"这个概念,但是在语义表达以及实际使用上是有所区别的。
描述
大多数计算机语言只有一个用来表示"无"这个概念的值,例如C
与C++
的NULL
、Java
与PHP
的null
、Python
的None
、lua
与Ruby
的nil
,但是在Js
中有null
与undefined
两种基本数据类型来表示"无"这个概念。在很多情况下null
和undefined
几乎等价,例如在if
语句中,都会被自动转为false
。
var _null = null;
var _undefined = undefined;
if(!_null && !_undefined) console.log("true && true"); // true && true
在==
运算符中认为null
与undefined
相等,当然在===
运算符中认为null
与undefined
是不相等的。
console.log(null == undefined); // true
console.log(null === undefined); // false
使用null
与undefined
来表示"无"是一个历史遗留原因,最初设计的时候Js
只设置了null
作为表示"无"的值,根据C
语言的传统,NULL
被设计成可以自动转为0
,但是JavaScript
的设计者Brendan Eich
,觉得这样做还不够,首先最初设计Js
的时候认为null
是一个Object
,这也就是typeof(null) === object
的原因,虽然后来有过提议更改null
的类型typeof(null) === null
,但是因为提议因为会造成大量旧Js
脚本出现问题而被否决了,Brendan Eich
觉得表示"无"的值最好不是对象,且如果null
自动转为0
,很不容易发现错误,因此Brendan Eich
又设计了一个undefined
数据类型。
虽然null
与undefined
具有非常高的相似性,但是其在语义与实际使用中是需要有所区分的,undefined
表示不存在该值的定义,null
表示一个值被定义了,定义为"空值",因此设置一个值为null
是合理的,例如obj.v = null;
,但设置一个值为undefined
是不合理的,因为其已经被主动声明定义,而设置为undefined
未定义是不合理的。
区别
-
null
是一个表示"无"的对象,Number(null) === 0
,undefined
是一个表示"无"的原始值,Number(undefined) === NaN
。 -
null
表示一个值被定义了,但是这个值是空值。- 作为函数的参数,表示函数的参数不是对象。
- 作为对象原型链的终点
Object.getPrototypeOf(Object.prototype)
。
-
undefined
表示不存在该值的定义。- 变量被声明了还没有赋值,表现为
undefined
。 - 调用函数时应该提供的参数没有提供,参数值表现为
undefined
。 - 对象没有赋值的属性,该属性的值就表现为
undefined
。 - 函数没有返回值,默认返回
undefined
。
- 变量被声明了还没有赋值,表现为
每日一题
https://github.com/WindrunnerMax/EveryDay
参考
https://www.cnblogs.com/sunyang-001/p/10792894.html
http://www.ruanyifeng.com/blog/2014/03/undefined-vs-null.html
https://blog.csdn.net/weixin_39713762/article/details/93807832
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法