Javascript 在不同浏览器上测试对象的删除值时遇到问题

Javascript 在不同浏览器上测试对象的删除值时遇到问题,javascript,google-chrome,firefox,coffeescript,jasmine,Javascript,Google Chrome,Firefox,Coffeescript,Jasmine,我需要测试从散列中删除: store = { 'a': 4 } delete store['a'] expect(store['a']).toBeUndefined() 该测试在chrome上通过,但在firefox上未通过。我得到: Expected null not to be defined. 如何避免此错误?您测试的条件不正确,因此Chrome和Firefox是否返回不同的值无关紧要(请参见下文)。考虑这一点: store = { a: 11 } store['a'] = undef

我需要测试从散列中删除:

store = { 'a': 4 }
delete store['a']
expect(store['a']).toBeUndefined()
该测试在chrome上通过,但在firefox上未通过。我得到:

Expected null not to be defined.

如何避免此错误?

您测试的条件不正确,因此Chrome和Firefox是否返回不同的值无关紧要(请参见下文)。考虑这一点:

store = { a: 11 }
store['a'] = undefined
这将为您提供一个
存储['a']
,它是
未定义的
,但
存储
仍将
'a'
作为键

如果要检查
delete
是否删除该属性,请准确地说:

expect('a' of store).toBe(false)
CoffeeScript的
of
操作符是JavaScript的
in
操作符,来自:

与已删除或未定义的属性一起使用

如果使用
delete
运算符删除属性,则
中的
运算符将为该属性返回false。
[…]
如果将某个属性设置为
undefined
,但不将其删除,则
中的
操作符将为该属性返回
true

这正是你要测试的行为


作为记录,当我说:

store = { 'a': 4 }
delete store['a']
console.log store['a']

我在最新的Firefox中得到了
未定义的

Firefox说我正在使用最新版本的Firefox。。。这似乎很有趣。我在任何地方都能得到同样的结果,你呢?如果您这样做了,您可以在jsfiddle.net或jsbin.com上复制您的问题吗?