2017-01-10 2 views
1

Я имею заявление какЛюбая arithmatic операция с NaN должна быть NaN

var x = parseInt(1)+'b'; 

почему этот результат является 1b, но isNAN('b') возвращается истинным; поэтому результат должен быть NaN?

+1

У вас уже есть ответы, но также проверьте документацию на [Выражения и операторы - Операторы строк] (https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Expressions_and_Operators#String_operators) – Nope

+0

Короткий ответ : потому что это не арифметическая операция :) –

ответ

12

Number + String не является арифметической операцией.

В заявлении Number + String двигатель преобразует число в эквивалент строки.

В вашем случае это будет 1 -> '1'. И тогда будет простой конкатенации строк, потому что оператор + объединит две строки.

'1' + 'b' === '1b'; 

Код сниппета

console.log(1 + 'b');

В случае с IsNaN('b'), он пытается определить это параметр номер или нет. 'b' не является числом (NaN), поэтому он вернется true.

Код сниппета

console.log(isNaN('b'));

Для более см Documentation

5

Потому что это не арифметическая операция, это конкатенация. Всякий раз, когда либо операнд + является строкой, выполняется конкатенация строки, а не добавление; details in the spec. Если другой операнд не является строкой, он преобразуется в строку. Итак, вы закончили с "1" + "b" =>"1b".

1

Оператор +, когда он имеет строку как один из ее аргументов, будет интерпретироваться как оператор «конкатенации» вместо «добавления». Нестроковое значение будет преобразовано в строку и добавлено к или добавлено к строковому значению, в зависимости от того, находится ли он справа или слева (соответственно) оператора.

Смежные вопросы