undefined
定义一个变量却不赋值,则其默认等于 undefined:var num;
console.log(num); // undefined
也可以直接赋值 undefined:
var undef = undefined;
console.log(undef); // undefined
使用 new Array(n) 的形式初始化一个长度为 n 的数组时,数组中的值默认为 undefined:
var arr = new Array(3);
console.log(arr); // [undefined × 3]
null
null 表示故意缺少任何对象值。它是JavaScript的原始值之一。 将一个不存在的 DOM 对象赋值给一个变量时,该变量为 null:var foo = document.getElementById("notExists");
console.log(foo); // null
检查null或者undefined,要注意等式(==)和身份(===)运算符之间的差异
typeof null // "object" (not "null" for legacy reasons)
typeof undefined // "undefined"
null === undefined // false
null == undefined // true
null === null // true
null == null // true
!null // true
NaN NaN( Not a Number ),表示非数字。任何值都不与 NaN 相等,甚至是它自己;
1 == NaN // false
"" == NaN // false
" " == NaN // false
"abc" == NaN // false
[] == NaN // false
{} == NaN // false
null == NaN // false
undefined == NaN // false
NaN == NaN // false
Number.NaN === NaN; // false
我们可以使用 isNaN 来判断一个值是否为 NaN:
isNaN( 1 ) // false
isNaN( "" ) // false
isNaN( " " ) // false
isNaN( "abc" ) // true
isNaN( [] ) // false
isNaN( {} ) // true
isNaN( null ) // false
isNaN( undefined ) // true
isNaN( NaN ) // true
与运算:&&
若其中存在一个及以上的 false,则结果为 false,否则为 true。且在 与 运算中存短路」,即遇到第一个 false 之后的内容不会运行true && false && true // false
true && true && true // true
true && false && i++ && j-- // false, i 和 j 的值不会变化
如果参与运算的不是布尔类型,结果如何?
true && 11 && "string" && {} // 输出什么?
我们先看一看以下三组变量的值:
0 == true // false
-123 == true // false
123 == true // false
"" == true // false
"string" == true // false
[] == true // false
[1,2,3] == true // false
null == true // false
undefined == true // false
NaN == true // false
{} == true // Uncaught SyntaxError
.使用Boolean(value)方法可以强制转换任意值为boolean类型,除了undefined、null 、+0、-0、NaN、“ ”六个值,其他都是自动转为true:
Boolean( 0 ) // false
Boolean( -123 ) // true
Boolean( 123 ) // true
Boolean( "" ) // false
Boolean( "string" ) // true
Boolean( [] ) // true
Boolean( [1,2,3] ) // true
Boolean( null ) // false
Boolean( undefined ) // false
Boolean( NaN ) // false
Boolean( {} ) // true
true && false // false
true && NaN // NaN
true && null // null
true && [] // []
0 && [] // 0
true && "AAA" && undefined // undefined
true && "AAA" && "BBB" // BBB
false && "AAA" && "BBB" // false
可以得出猜测:「与」运算的结果取决于第一个其 Boolean(xx) 转换结果为 false 的值;若全部皆为 true,则结果为最后一个值。
或运算:||
同 && 「与」运算类似,「或」运算的结果也不一定为布尔类型,其结果取决于第一个其 Boolean() 结果为 true 的值,若全部为 false,则结果为最后一个元素的值,如以下例子:true || false // true
true || NaN // true
true || null // true
true || [] // true
0 || [] // []
true || "AAA" || undefined // true
true || "AAA" || "BBB" // true
false || "AAA" || "BBB" // "AAA"