コンソールで以下のコードを入力してみましょう。
typeof + ''
これは 'number' を返しますが、引数のない typeof 自体はエラーをスローします。なんで?
コンソールで以下のコードを入力してみましょう。
typeof + ''
これは 'number' を返しますが、引数のない typeof 自体はエラーをスローします。なんで?
単項プラス演算子は、文字列に対して内部ToNumber
アルゴリズムを呼び出します。+'' === 0
typeof + ''
// The `typeof` operator has the same operator precedence than the unary plus operator,
// but these are evaluated from right to left so your expression is interpreted as:
typeof (+ '')
// which evaluates to:
typeof 0
"number"
とは異なり、オペレーターによって呼び出されるparseInt
内部アルゴリズムは、空の文字列 (および空白のみの文字列) を Number に評価します。仕様から少し下にスクロールします。ToNumber
+
0
ToNumber
空であるか空白のみを含む StringNumericLiteral は に変換されます
+0
。
コンソールでの簡単なチェックは次のとおりです。
>>> +''
<<< 0
>>> +' '
<<< 0
>>> +'\t\r\n'
<<< 0
//parseInt with any of the strings above will return NaN