LoginSignup
30
23
お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

【超難問】絶対に解けないJavaScriptクイズ8選

Last updated at Posted at 2024-06-29

はじめに

以下のクイズのコードの実行結果をそれぞれ考えてみてください。
一番最後にスライドもあります。

Q1

console.log(018 - 015);
解答
実行結果
5
解説

JavaScript では、先頭に 0 が付いた数字は8進数とみなされます。
しかし、018は無効な8進数なので、10進数とみなされる。015は8進数となり、13となります。
ゆえに、018-015 = 18-13 = 5となります。

Q2

const isTrue = true == []; 
const isFalse = true == ![]; 

console.log ( isTrue + isFalse);
解答
実行結果
0
解説

まず、1行目を解説します。true[]は型が違うので、数値へと変換されます。Number(true)Number([])が最初に評価されて、それぞれ10となります。1==0となるので const isTrue = falseとなります。

2行目も同様かと思うのですが、true![]は両方ともブール値なので、数字に変換されません。また、[]trueと解釈されるので、![]はfalseになります。
ゆえに、const isFalse = true == falseとなり、const isFalse = falseとなります。

以上から最後の行console.log ( isTrue + isFalse);console.log ( false + false);となる。 falseが数値に変化され、console.log (0 + 0);
したがって、0が答えとなる。

Q3

console.log(3 > 2 > 1);
解答
実行結果
false
解説

まず、3 > 2trueと評価されます。
次にtrue > 1ですが、>演算子の場合は両方数値型に変換されます。

Number(true) > Number(1) => 1 > 1となるので答えはfalseになります。

Q4

console.log(typeof typeof 1);
解答
実行結果
string
解説

最初にtypeof 1が評価され、numberとなります。
typeof 'number'は string となるので、string が出力されます。

Q5

console.log(('b' + 'a' + + 'a' + 'a').toLowerCase());
解答
実行結果
banana
解説

'ba' + + 'a''ba' + NaNになります。
+ 'a'+ はプレフィックス演算子となり、Number('a')と等しいです。
ゆえに以下のように評価されます。

'b' + 'a' -> 'ba'
'ba' + + 'a' -> 'ba' + NaN -> 'baNaN'
'baNaN' + 'a' -> 'baNaNa'
'baNaNa'.toLowerCase() -> 'banana'

Q6

console.log(typeof NaN);
解答
実行結果
number
解説

NaNの型は number (数値型) です。

Q7

console.log(0.1 + 0.2 == 0.3);
解答
実行結果
false
解説

0.1 + 0.20.30000000000000004 となります。
なので、console.log(0.30000000000000004 == 0.3); となり、答えは falseとなります。

Q8

const numbers = [33, 2, 8];
numbers.sort();
console.log(numbers[1])
解答
実行結果
33
解説

JavaScript では以下のような配列も可能である。

const array = ["1", true, 55, 1.421, "foo", {}];

Array.prototype.sortでは、配列を一度stringにしてからソートする。

上記の問題の場合だと、ソート時に["33", "2", "8"];とみなされる。
string だと 2 → 3 → 8 の順になるのでnumbers.sort()["2", "33", "8"]となる。よって、答えは33となる。

スライド

元ネタ

さて8問中何問解けましたか?
もし全問解けたらコメントください!(何もないけど)

30
23
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
23