JavaScript 中的 undefined NaN null 与&& 和 ||

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"

猜你喜欢

转载自blog.csdn.net/weixin_44844335/article/details/89394562