JavaScriptでなぜ ++[[]][+[]]+[+[]] は "1" を返すのか?
JavaScriptでなぜ ++[[]][+[]]+[+[]] は "10" を返すのか?
コードの分解と型変換
このコードは、いくつかの部分に分けて理解することができます。
[]
: 空の配列を作成します。+[]
: 空の配列を数値に変換します。これは、JavaScriptでは空の配列が数値 0 と同じ扱いになるためです。++
: 数値に 1 を加算します。+
: 2つの数値を加算します。
演算子の優先順位
上記の演算は、JavaScriptの演算子の優先順位に従って順番に実行されます。
++
と+
は同じ優先順位なので、左から右に実行されます。
結果
上記のコードの実行結果は、以下のようになります。
++[[]]
は++0
となり、1 を加算して 1 になります。1 + 0
は 1 になります。
以上のことから、++[[]][+[]]+[+[]]
は "10" ではなく "1" を返すことが分かります。
補足
このコードは、JavaScriptの型変換と演算子の優先順位を理解するための例としてよく使われます。しかし、実際のコードではこのような複雑な式を使うことは避け、より分かりやすく記述することを心がけましょう。
// 空の配列を作成
const array = [];
// 空の配列を数値に変換
const number1 = +[];
// 数値に 1 を加算
const number2 = ++number1;
// 空の配列を数値に変換
const number3 = +[];
// 2つの数値を加算
const result = number2 + number3;
console.log(result); // 1
1
解説
上記のコードは、++[[]][+[]]+[+[]]
の動作をより分かりやすく説明するために、変数を使って分割したものです。
各変数の値は以下の通りです。
array
: 空の配列number1
: 0result
: 1
コードを実行すると、result
には 1 が出力されます。これは、++[[]][+[]]+[+[]]
が "10" ではなく "1" を返すことを示しています。
JavaScriptで空の配列を数値に変換する方法
Number()
関数は、文字列やその他のオブジェクトを数値に変換するために使用できます。
const array = [];
const number = Number(array);
console.log(number); // 0
出力結果
0
一致演算子 (==
) は、2つの値が同じかどうかを比較するために使用できます。空の配列と数値 0 を比較すると、真 (true) が返されます。
const array = [];
const number = array == 0;
console.log(number); // true
true
const array = [];
const number = !array;
console.log(number); // true
true
これらの方法のいずれを使用しても、空の配列を数値 0 に変換することができます。
注意:
上記の方法は、空の配列のみを数値に変換するために使用できます。配列内に要素が含まれている場合は、これらの方法は期待通りの結果を返さない可能性があります。
javascript syntax jsfuck