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