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上复制您的问题吗?