gpt4 book ai didi

javascript - 因为在 MSIE 10 上的行为不同

转载 作者:行者123 更新时间:2023-11-30 08:44:40 25 4
gpt4 key购买 nike

以下 Jasmine 测试适用于 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com