以下茉莉花测试适用于PhantomJS或Chrome,但不适用于MSIE 10。
describe("utility", function () {
var utility = {
// { A: true, B: true } will become 'AB'
CombineValues: function (splitValues) {
var combined = '';
for (item in splitValues) { // on IE, item is a function, not a string
if (splitValues[item]) // on IE, this returns false all the time
combined = combined + item;
}
return combined;
},
// 'AB' will become { A: true, B: true }
SplitValues: function (combined) {
var splitValues = {};
for (var i = 0; i < combined.length; i++) {
splitValues[combined.charAt(i)] = true;
}
return splitValues;
}
};
it('CombineValues(SplitValues()) should be idempotent', function () {
// on MSIE, result is '' instead of 'ABC'
expect(utility.CombineValues(utility.SplitValues('ABC'))).toBe('ABC');
});
});
我想念什么?
谢谢!
编辑:在IE上,该项显示为:
function item() {
[native code]
}
{
[prototype] : function() { [native code] } ,
prototype : {...}
}
最佳答案
在Internet Explorer中,window.item
is a function。显然是不可重写的。
通过for (item in …)
循环,您将隐式分配给该全局变量,该变量在马虎模式下(无提示)失败。尝试添加"use strict";
,它将引发错误。
使用局部变量:
for (var item in splitValues) …
// ^^^
在严格模式下,分配给未声明的(在Chrome / Webkit中)全局变量也会失败,在草率模式下,您只是使用该代码创建全局
item
变量。关于javascript - 对于MSIE 10上的行为不同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23034474/