考慮到:var foo = {"5" : "ten", fighter : "Grohl"};
在JavaScript中使用括號表示法時,爲什麼變量名不會轉換爲字符串?
爲什麼會出現這種結果?
foo[5];
"ten"
foo[1 + 4];
"ten"
foo[fighter];
ReferenceError: fighter is not defined
當然,如果我開始與此:var fighter = 'fighter';
然後我得到Grohl
預期。
我的理解是,當使用括號表示法時,括號內的表達式將被計算並轉換爲字符串。因此,在foo[5]
中,toString()在5上被調用,以便將其評估爲字符串,該字符串必須與括號表示法一起使用。所以我的問題是:
爲什麼不一樣的奢侈品提供給fighter
?我知道foo ['fighter']有效,但知道不一定理解。我想了解這裏發生了什麼。
編輯:爲什麼會我認爲這是事實。如果戰鬥機是一個持有另一個字符串的變量......說'Dave',那麼javascript會如何知道我是指「Dave」的引用,還是我想將戰鬥機轉換爲實際的字符串「fighter」。很明顯,JavaScript無法讀懂我的想法。感謝@DaveNewton和@pointy的照明。
爲什麼*會*是?你將如何區分一個字符串和一個持有字符串的變量?魔法? –
'var foo = {5:「ten」,fighter =「Grohl」};'只是一個語法錯誤。 – kapa
@bažmegakapa謝謝,糾錯。 –