如果我有这个JavaScript
var someVar = someOtherVar == null;
someOtherVar
的哪些值会导致someVar
成立?
注意:根据我的阅读,如果someOtherVar
为undefined
,那么someVar
将为真。但是我正在改变我的很多代码以使用这种比较方式,我想确保没有其他任何内容会导致 truthy 语句(除null
和{{1}之外})。
答案 0 :(得分:4)
someOtherVar
的哪些值会导致someVar
成为true
?
仅null
和undefined
。
The algorithm in the spec is relatively straight forward:
- 如果
Type(x)
与Type(y)
相同,则返回执行Strict Equality Comparisonx === y
的结果。- 如果
x
null 且y
未定义,请返回 true 。- 如果
x
未定义且y
null ,请返回 true 。- 如果
Type(x)
为数字且Type(y)
为字符串,则返回比较结果x == ToNumber(y)
。- 如果
Type(x)
为字符串且Type(y)
为数字,则返回比较结果ToNumber(x) == y
。- 如果
Type(x)
为布尔值,则返回比较结果ToNumber(x) == y
。- 如果
Type(y)
为布尔值,则返回比较结果x == ToNumber(y)
。- 如果
Type(x)
是字符串,数字或符号且Type(y)
是对象,则返回比较结果x == ToPrimitive(y)
。- 如果
Type(x)
是对象且Type(y)
是字符串,数字或符号,则返回比较结果ToPrimitive(x) == y
。- 返回 false 。
醇>
步骤1处理案例null == null
。第2步和第3步处理案例null == undefined
和undefined == null
。步骤6和7处理其他值为布尔值的情况,因此您最终将数字与null
进行比较。由于null
不是对象,数字,字符串,布尔值或符号,因此不应用其他步骤,因此返回false
(步骤10)。
JavaScript中的null比较会产生什么影响?
只有当另一个值是布尔时,它才会被强制转换为数字,因此您最终会比较0 == null
或1 == null
,两者都是false
。
在所有其他情况下,没有类型强制发生(没有任何强制被强制转移到null
而null
没有被强制转换为任何其他数据类型。)
答案 1 :(得分:1)
看起来确实只有null
和undefined
:
const arr = ['string', true, false, 0, null, undefined, NaN, {}, [], 4, -1, -0];
const r = arr.map((e,i) => {
return { i, e, bool: e == null }
}).filter(e => e.bool);
// return elements which result in 'null'
// i: index inside initial array 'arr'
console.log(JSON.stringify(r, null, 2));