1.null 和 undefined
1.1 概述
null
与 undefined
含义非常相似,对于变量来说基本没有区别
var a = undefined;
// 或者
var a = null;
对于 if
语句两者都属于假值
范畴,相等运算符(==
)直接输出 true
if(!undefined){
console.log('undefined is false');
}
// undefined is false
if(!null){
console.log('null is false');
}
// null is false
console.log(undefined == null)
// true
1995 年 JavaScript
诞生的时候只有null
,根据C语言传统,null
可以自动转为 0
。
console.log(Number(null)) // 0
console.log(5 + null) // 5
JavaScript的设计者 Brendan Eich 觉得不行。他认为表示“无”的值,最好不是对象。且刚开始JS不包括错误处理机制,自动转变为0,不容易发现错误。因此设计了undefined
表示“此处无定义”的原始值,转变为数值是NaN
。
console.log(Number(undefined)) // NaN
console.log(5 + undefined) // NaN
1.2用法和含义
- null:空置、未出错
- undefined:未定义。多数是预期之外的错误
以下是几种返回undefined
的场景
// 声明变量,但是没有赋值时引用此变量
var i;
console.log(i); //undefined
// 调用函数时,未传入参数
function(x){
console.log(x);
}
f() // undefined
// 对象没有赋值的属性
var o = new Object();
console.log(o.p); // undefined
// 函数没有返回值
function(){}
console.log(f()) // undefined
2.布尔值
- true
- false
下面的运算符会返回布尔值:
- 前置逻辑运算符:
!
- 相等运算符:
===
!==
==
!=
- 比较运算符:
>
>=
<
<=
如果JavaScript预期某个位置应该是
boolean
类型,自动将该位置的值转换为boolean
类型。以下内容转换后是false
,其余都视为true
- undefined
- null
- false
- 0
- NaN
- “” 或 ” (空字符串)
空的数组 []
和空的对象 {}
对应的布尔值都是 true
if([]){
console.log('true');
}
// true
if({}){
console.log('true');
}
// true
3.参考链接
Axel Rauschmayer, Categorizing values in JavaScript