我想我在IE的(IE8)處理for-in JavaScript語句時發現了一個錯誤。經過幾小時將其燒成一個小例子後,它看起來像IE特意跳過任何在for-in循環中稱爲「toString」的屬性 - 無論它是在原型中還是屬於該對象的「Own屬性」。for-in JavaScript語句中的IE8錯誤?
我已經把我的test code here:
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;
}
這將產生:
obj.hasOwnProperty('toString') == true
countProps(obj) = 1
obj.toString() = hello
但在IE中,我得到:
obj.hasOwnProperty('toString') == true
countProps(obj) = 0
obj.toString() = hello
的任何這種特殊的外殼名爲'toString'的屬性破壞了我的代碼,試圖將方法複製到Function.prototype中 - 我的cu stom toString函數總是被跳過。
有沒有人知道解決方法?這是某種怪癖模式行爲 - 還是隻是一個BUG?
感謝引用我的回答,我將發佈一些解決方法的問題在其他線程 - 和可能更多的實現bugs-;) – CMS 2010-09-14 02:31:32
感謝。因此,與JavaScript規範相反,這是用戶定義的屬性不可枚舉的情況。是否有所有這些屬性的列表,所以當dontEnumBug爲真時,我可以爲我的代碼添加一個特殊的測試? – mckoss 2010-09-14 06:12:11
我更新了我的測試代碼: http://startpad.googlecode.com/hg/labs/js/misc/tostring.html 解決方法應專門測試名爲toString,toLocaleString,valueOf ,構造函數和isPrototypeOf,來自我對IE8的測試。 – mckoss 2010-09-14 20:11:23