[ ][[ ]]の結果は未定義です 。この[[ ]][ ]はSyntaxError: Unexpected token ]をスローします。説明はありますか?
7 に答える
構文は、によってobject[key]
のプロパティを取得するために使用されます。内部にある必要があります。そうしないと、構文エラーが発生します。object
key
key
[]
[][[]]
、オブジェクトは空の配列[]
、キーは別の空の配列[]
です。
[[]][]
の場合、オブジェクトは内部に空の配列を持つ配列ですが、内部にキーはありません[]
。
なぜ誰もがこのようなものを使いたがるのかわかりませんが、ここに説明があります:
ケース 1:
[]
空の配列です。[n]
これに ( )を追加することで[][n]
、n 番目の要素を参照します。nあなたの場合は[]
です。インタープリターはそれを使用可能な値に変換しようとし、最終的に空の文字列 ("") になります。したがって、実際に[][""]
はundefinedである参照を試みます。
ケース 2:
[[]]
空の配列内の空の配列です。それに追加[n]
することで ( [[]][n]
)、外側の配列の n 番目の要素を参照します。インデックスnを提供する必要があります。そうしないと、エラーがスローされます。これは、あなたの場合に発生します。
なぜこれを使用する必要があるのか 想像できませんが、ここに私の説明があります:
[[]] は new Array( new Array()) であり、1 つの要素を持つ配列であり、空の配列です。
[] は空の配列であるため、[][2] または [][0] を実行すると undefined が返されます。2 番目の [] はインデックスです。
したがって、[] [[]] では、インデックス [] を探しています。
[][0] == [][[]]
しかし [[]] [] では、インデックスは空で、[1,2,3][] と同等です -> SyntaxError: Unexpected token ]
JavaScript オブジェクトには、関連付けられたプロパティがあります。単純なドット表記またはブラケット表記を使用してオブジェクトのプロパティにアクセスし、参照すると値non existing key
が得られundefined
ます。
var obj = {};
obj[ 'key' ]
重要なことの 1 つは、JavaScript 配列では Object であるということです
console.log( [] instanceof Object ) // gives true so it act like object
そして面白いのは、以下のように渡すことです。
var keyCanbeFunction = function(){};
var keyCanbeObject = {};
var keyCanbeArray = [] ;
console.log( obj[ keyCanbeArray ] ) // gives undefined, that key not exists
および 1 番目のケース:
var obj = [];
obj[ keyCanbeArray ] // gives undefined
および 2 番目のケース:
var obj = [[ ]]
obj[]; // where is key ???
わかった。キーを使用して配列にアクセスするだけです。そうしないと、構文エラーがスローされます。
[][[]]
- 配列が定義されて[]
いて、未定義の配列からキーにアクセスしています。
[[]][]
- 配列が定義されていて、その配列からアクセスするためのキーを渡していません - 構文エラー。