2017-02-18 9 views
1

番号1は空の配列に暗黙的にキャストされていますか?1 [1]がjavascriptで未定義に評価されているのはなぜですか?

> a = 1[1] 
undefined 
> console.log(a) 
undefined 
undefined 
+0

「1」は数字「 – hackerrdave

+0

」です。なぜなら、数字にはプロパティ '1'がないからです。 – Thomas

+1

[なぜ[0 [0] 'が構文的に有効なのですか?]とほとんど同じです((1)[1] http://stackoverflow.com/questions/29250950/why-is-00-syntactically-valid/29251025#29251025) – jfriend00

答えて

4

暗黙的に空の配列に番号1のキャストですか?数値は、暗黙的に(および一時的)である

号は数オブジェクトに変換され、プロパティ1は、そのオブジェクトにアクセスされます。

ブラケット表記法を使用している[1])は配列に特異的ではない、オブジェクトプロパティは、ブラケット表記を介してアクセスすることができます。私。次の2つは等価です。obj.foo(ドット表記)とobj['foo'](角カッコ表記)です。

var numObj = new Number(1); 
 
console.log(numObj[1]);


暗黙的な変換は、あなたがにアクセスするたびに起こる:

数は、しかし、プロパティ1を持っており、非既存のプロパティにアクセスするundefinedを返していないオブジェクトそのプロパティが存在するかどうか、またはそのプロパティがプリミティブ値にあるかどうかない。次の例では、プリミティブ数値も暗黙的オブジェクトに変換され、次いで、そのtoFixedメソッドが実行される:

var num = 42; 
 
console.log(num.toFixed(2)); 
 
// or equivalently to your example: 
 
console.log(42['toFixed'](2))

番号を、文字列、ブール値およびシンボルは、オブジェクトの等価物を有します。 NullとUndefinedはしません。

関連する問題