2011-09-20 39 views
0

什麼,當我嘗試發生在環路上這樣一個int:上不是一個對象別的東西環路

var x = 0; 
for (var k in x) { 
    // x[k] 
} 

我應該尋找意外的行爲還是隻是沒有進入循環呢? (到目前爲止我的實驗似乎表明它不會進入循環......但它可以做一些我看不到的東西)

回答

2

在vanilla JavaScript Number對象原型中沒有定義方法。你的代碼進入循環(所有的 JS中的對象都可以迭代),但在這種情況下沒有任何東西可以迭代。

如果你這樣做:

Number.prototype.foo = "bar"; 

你的循環體將在foo財產運行一次。

+1

其實,[有方法](http:// ecma262 -5.com/ELS5_HTML.htm#Section_15.7.4):'toFixed','toPrecision'等,但我認爲它們不是可枚舉的。 –

+0

@Felix:你說得對。它們也不會顯示在Chrome調試控制檯中('console.dir(0)'表示「沒有屬性」)。 – Tomalak

+0

是的,我也嘗試過。我認爲在這種情況下,值不會轉換爲對象。 'console.dir(new Number(0))'雖然可以工作('__proto__'顯示包含這些方法)。 –

1

x不是一個集合。它有什麼迭代?

+0

,因爲我不是他唯一一個使用我的代碼。很短的例子: function f(x){var k in x){ document.write(x [k] +「
」); } } f(0); (mycollection); (抱歉的格式不對) – Hugo

+2

@Hugo:這是文檔的用途。如果有人將價值傳遞給你不明白的函數:不是你的問題。 –

+0

你是絕對正確的。 但你會同意,獲得更好的知識如何工作不會傷害(thx爲您的意見,順便說一句) – Hugo

0

只有對象可以迭代for in循環。

因此,假設您有一個變量a,它包含對某物的引用。如果typeof a !== 'object'那麼你不能迭代你的a變種。

請注意,您可以遍歷數組,因爲數組也是對象(alert(typeof []))。

至於你的例子,x不是一個對象,它是一個數字(typeof x == 'number'),所以for in將不起作用;但如果你申報你的電話號碼爲Number對象:

var x = new Number(0); 

你可以遍歷它的方法,因爲現在typeof x == 'object'

+1

我認爲在這種情況下,JavaScript會自動將數字轉換爲數字對象。 –

相關問題