我有一个简单的 json 解析对象,有时定义了变量 tt,有时则没有。
出于某种原因,jsonobject.tt == null
根据 tt
是否正确返回 1
或 0
定义的。无论如何,jasonobject.tt === null
只是返回0
。我认为 ===
是用来避免问题的东西。
这是怎么回事?
最佳答案
===
是严格相等运算符,它比较类型和值。值 null
是 Null 类型,只有一个值 - null
。
Undefined 是未定义类型,它也只有一个值 - 'undefined'。
使用严格相等运算符时,null !== undefined,因为它们是不同的类型(请参阅严格相等比较算法的步骤 1,ECMA-262 § 11.9.6)。
==
是相等运算符。使用 ==
的比较使用抽象相等比较算法 (ECMA-262 § 11.9.3),其中包括:
- If Type(x) is the same as Type(y), then ...
- If x is null and y is undefined, return true.
- If x is undefined and y is null, return true.
因此,null == undefined
根据定义返回 true。严格来说,测试属性是否存在(无论其值是多少)应该使用 hasOwnProperty:
if (jsonobject.hasOwnProperty('tt')) {
// property exists
}
但是在实践中,对未定义的严格测试没有太大区别:
if (jsonobject.tt === undefined)
因为属性是否存在且值为未定义或者根本没有定义通常是等价的。使用 ===
还意味着,如果 tt 存在但已被赋值为 null
,则上述代码将返回 false。
关于javascript - === 和 == 如何以不同方式处理 null 比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8115827/