Javascript 使用!而in运算符在应该为真时返回false,为什么?

Javascript 使用!而in运算符在应该为真时返回false,为什么?,javascript,node.js,Javascript,Node.js,在Javascript中,以下代码是这样工作的: > var foo = { bar: 1 } undefined > foo { bar: 1 } > 'bar' in foo true > !'bar' in foo false > 'baz' in foo false > !'baz' in foo false 为什么要使用和不返回true?您需要执行!('baz'在foo中),否则它与foo中的(!'baz')相同(在foo中查找'false'),原

在Javascript中,以下代码是这样工作的:

> var foo = { bar: 1 }
undefined
> foo
{ bar: 1 }
> 'bar' in foo
true
> !'bar' in foo
false
> 'baz' in foo
false
> !'baz' in foo
false
为什么要使用
中的code>和
不返回
true

您需要执行
!('baz'在foo中)
,否则它与foo中的
(!'baz')相同(在foo中查找
'false'),原因是运算符优先

!'foo' in {false: true} //as in 'false' in {false: true}
//true

!('foo' in {false: true}) //as in, does a key "foo" not exist in the object
//true

您需要使用

!("key" in object)
现在是这样的

(!"key") in object
这和做同样的事

false in object
"false" in object
成为什么