gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 20:00:06 25 4
gpt4 key购买 nike

我有一个简单的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com