javascript - === 和 == 如何以不同方式处理 null 比较?

标签 javascript string json comparison

我有一个简单的 json 解析对象,有时定义了变量 tt,有时则没有。

出于某种原因,jsonobject.tt == null 根据 tt 是否正确返回 10定义的。无论如何,jasonobject.tt === null 只是返回0。我认为 === 是用来避免问题的东西。

这是怎么回事?

最佳答案

=== 是严格相等运算符,它比较类型和值。值 null 是 Null 类型,只有一个值 - null

Undefined 是未定义类型,它也只有一个值 - 'undefined'。

使用严格相等运算符时,null !== undefined,因为它们是不同的类型(请参阅严格相等比较算法的步骤 1,ECMA-262 § 11.9.6)。

== 是相等运算符。使用 == 的比较使用抽象相等比较算法 (ECMA-262 § 11.9.3),其中包括:

  1. If Type(x) is the same as Type(y), then ...
  2. If x is null and y is undefined, return true.
  3. 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/

相关文章:

oracle - 添加具有空字符串作为默认值且非空约束的列会导致 oracle 数据库的行为不一致

ios - 解析字符串并在 swift 中以 Json 形式发送

javascript - NodeJS HTTPS.get 如何知道下载完成?

javascript - 在 Javascript 中缓存去抖函数

java - 按分隔符和其他特定字符串分割字符串

javascript - 如何使用正则表达式匹配多个值返回单个值?

javascript - 使用 Javascript 创建表

javascript - 外部 Javascript 小书签不起作用

json - 如何提高具有 OPENJSON 来过滤 JSON 数组属性的 T-SQL 查询的性能

ruby-on-rails - 如何断言它使用正确的 json 呈现?