Javascript ===和==如何以不同方式处理空比较?
我有一个简单的json解析对象,它有时定义了一个变量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
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)