Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ===和==如何以不同方式处理空比较?_Javascript_String_Json_Comparison - Fatal编程技术网

Javascript ===和==如何以不同方式处理空比较?

Javascript ===和==如何以不同方式处理空比较?,javascript,string,json,comparison,Javascript,String,Json,Comparison,我有一个简单的json解析对象,它有时定义了一个变量tt,有时不定义 出于某种原因,jsonobject.tt==null根据是否定义了tt正确返回1或0jasonobject.tt==null只返回0而不考虑。我认为==是用来避免问题的东西 这是怎么回事 出于某种原因(jsonobject.tt==null)正确返回1或0 首先,比较返回true或false 第二,你想要什么 jsonobject.tt==未定义 如果某个值不存在,则该值未定义 其他检测方法包括 !jsonobject.has

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

出于某种原因,
jsonobject.tt==null
根据是否定义了
tt
正确返回
1
0
jasonobject.tt==null
只返回
0
而不考虑。我认为
==
是用来避免问题的东西

这是怎么回事

出于某种原因(jsonobject.tt==null)正确返回1或0

首先,比较返回
true
false

第二,你想要什么

jsonobject.tt==未定义

如果某个值不存在,则该值未定义

其他检测方法包括

!jsonobject.hasOwnProperty(“tt”)

!(jsonobject中的“tt”)


由于
=
是一个完全奇怪的运算符,因此,
null==未定义的
。因此,如果属性不存在,则
jsonobject.tt==null
将返回true

如果变量尚未定义,则其值为
未定义

undefined == null
鉴于

undefined !== null

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

Undefined是未定义的类型,它也只有一个值-“Undefined”

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

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

  • 如果类型(x)与类型(y)相同,则
  • 如果x为null而y未定义,则返回true
  • 如果x未定义且y为null,则返回true
  • 因此
    null==undefined
    根据定义返回true。严格来说,测试是否存在财产(无论其价值如何)应使用hasOwnProperty:

    但是,在实践中,对未定义的以下各项进行严格测试并没有太大区别:


    因为属性是否存在且值是否未定义通常是等价的。使用
    ==
    也意味着如果tt存在,但被分配了
    null

    的值,则上述内容将返回false。这是一条注释,而不是答案。在我添加我的评论时偷偷更新你的答案。我知道,发布一个简短的片段作为答案会让你在“最古老”的名单中名列前茅,因此可能会获得更多的选票;这主要是我不赞成这种做法的原因。@zzbov我更喜欢把它看作是一个流式的答案。除了stackoverflow.com没有流式应答的体系结构之外,如果早期版本没有提供版本控制,那么很难对问题进行评论。很好,你提到了
    .hasOwnProperty()
    中的
    操作符:我认为这些通常是更好的选择,因为它们可以让您区分什么时候属性根本不存在,什么时候属性确实存在,但其值
    未定义
    if (jsonobject.hasOwnProperty('tt')) {
      // property exists
    }
    
    if (jsonobject.tt === undefined)