我想我已经在IE(IE8)处理for-in javascript语句中发现了一个错误.经过几个小时的煮沸这个小例子后,看起来IE特意在for-in循环中跳过任何名为"toString"的属性 - 无论它是在原型中还是对象的"自有属性".
function countProps(obj) {
var c = 0;
for (var prop in obj) {
c++;
}
return c;
}
var obj = {
toString: function() {
return "hello";
}
};
function test() {
var o = "";
var d = document.getElementById('output');
o += "<br/>obj.hasOwnProperty('toString') == " + obj.hasOwnProperty('toString');
o += "<br/>countProps(obj) = " + countProps(obj);
o += "<br/>obj.toString() = " + obj.toString();
d.innerHTML = o;
}
Run Code Online (Sandbox Code Playgroud)
这应该产生:
obj.hasOwnProperty('toString') == true
countProps(obj) = …Run Code Online (Sandbox Code Playgroud) javascript internet-explorer prototype quirks-mode internet-explorer-8
如果我们有
var randomname = {};
randomname.attribute = 'something';
function randomname(){
alert(randomname.attribute);
}
randomname();
Run Code Online (Sandbox Code Playgroud)
javascript会抛出任何错误吗?
为什么是这样?
javascript是否应该通过您调用它的方式告诉您的内容?