什麼,當我嘗試發生在環路上這樣一個int:上不是一個對象別的東西環路
var x = 0;
for (var k in x) {
// x[k]
}
我應該尋找意外的行爲還是隻是沒有進入循環呢? (到目前爲止我的實驗似乎表明它不會進入循環......但它可以做一些我看不到的東西)
什麼,當我嘗試發生在環路上這樣一個int:上不是一個對象別的東西環路
var x = 0;
for (var k in x) {
// x[k]
}
我應該尋找意外的行爲還是隻是沒有進入循環呢? (到目前爲止我的實驗似乎表明它不會進入循環......但它可以做一些我看不到的東西)
在vanilla JavaScript Number對象原型中沒有定義方法。你的代碼進入循環(所有的 JS中的對象都可以迭代),但在這種情況下沒有任何東西可以迭代。
如果你這樣做:
Number.prototype.foo = "bar";
你的循環體將在foo
財產運行一次。
只有對象可以迭代for in
循環。
因此,假設您有一個變量a
,它包含對某物的引用。如果typeof a !== 'object'
那麼你不能迭代你的a
變種。
請注意,您可以遍歷數組,因爲數組也是對象(alert(typeof [])
)。
至於你的例子,x不是一個對象,它是一個數字(typeof x == 'number'
),所以for in
將不起作用;但如果你申報你的電話號碼爲Number
對象:
var x = new Number(0);
你可以遍歷它的方法,因爲現在typeof x == 'object'
我認爲在這種情況下,JavaScript會自動將數字轉換爲數字對象。 –
其實,[有方法](http:// ecma262 -5.com/ELS5_HTML.htm#Section_15.7.4):'toFixed','toPrecision'等,但我認爲它們不是可枚舉的。 –
@Felix:你說得對。它們也不會顯示在Chrome調試控制檯中('console.dir(0)'表示「沒有屬性」)。 – Tomalak
是的,我也嘗試過。我認爲在這種情況下,值不會轉換爲對象。 'console.dir(new Number(0))'雖然可以工作('__proto__'顯示包含這些方法)。 –