2012-12-05 25 views
10

我一直在嘗試在Internet Explorer中調試一些js,我無法弄清楚這一點。下面是導致該錯誤的行:IE問題 - Object.keys(值).length不支持

var numberOfColumns = Object.keys(value).length; 

和錯誤是...

Message: Object doesn't support this property or method 
Line: 640 
Char: 5 
Code: 0 
URI: xxx 

起初我以爲它有什麼做的Object.keys(value).length;財產,但奇怪的是(對我反正),錯誤在char 5,這是變量名的開頭。

無論如何,我不知道發生了什麼或如何解決它。另外,如果我更換:

var numberOfColumns = Object.keys(value).length; 

與...

var numberOfColumns = 9; // troubleshooting 

的錯誤仍然存​​在。請幫忙。

更新

的jsfiddle添加

http://jsfiddle.net/4Rab7/

+0

您是否嘗試使用螢火蟲或任何其他調試工具運行它? – AMember

+0

你可以展示一些更多的代碼,也許是一個問題jsfiddle – AMember

+0

如果你用無故障的代碼替換被認爲有錯誤的代碼,但它仍然失敗,那麼問題就出現了。 –

回答

19

在IE> = 9中支持keys屬性。您可能正在測試它的早期版本。一個簡單的解決方法是:

var length = 0; 
for(var prop in data){ 
    if(data.hasOwnProperty(prop)) 
     length++; 
} 

這裏是一個演示:http://jsfiddle.net/vKr8a/

看到這個兼容性表以獲得更多信息:

http://kangax.github.com/es5-compat-table/

+0

真棒,我只是想出瞭解決方案,但你的是比我更簡單(和更好):http://jsfiddle.net/xDfBZ/。我一定會和你一起去 – veryConfused

+0

http://jsfiddle.net/t8EfF/1/ – noob

+0

這會污染'prop' global var –

4

Object.keys已在ECMAScript的第5版相繼推出。所以如果你的IE版本低於9,它將不被支持。

12

或者,你可以使用建議的填充工具 - 瀏覽器是不本地支持Object.keys

Object.keys=Object.keys||function(o,k,r){r=[];for(k in o)r.hasOwnProperty.call(o,k)&&r.push(k);return r} 
+0

乾淨,簡單,有效。 – Piyush