Я имею заявление какЛюбая arithmatic операция с NaN должна быть NaN
var x = parseInt(1)+'b';
почему этот результат является 1b, но isNAN('b')
возвращается истинным; поэтому результат должен быть NaN?
Я имею заявление какЛюбая arithmatic операция с NaN должна быть NaN
var x = parseInt(1)+'b';
почему этот результат является 1b, но isNAN('b')
возвращается истинным; поэтому результат должен быть NaN?
Number + String
не является арифметической операцией.
В заявлении Number + String
двигатель преобразует число в эквивалент строки.
В вашем случае это будет 1 -> '1'
. И тогда будет простой конкатенации строк, потому что оператор +
объединит две строки.
'1' + 'b' === '1b';
Код сниппета
console.log(1 + 'b');
В случае с IsNaN('b')
, он пытается определить это параметр номер или нет. 'b'
не является числом (NaN
), поэтому он вернется true
.
Код сниппета
console.log(isNaN('b'));
Для более см Documentation
Оператор +
определяется как конкатенация, если один из операндов является строкой.
Источник: https://www.ecma-international.org/ecma-262/5.1/#sec-11.6.1
Потому что это не арифметическая операция, это конкатенация. Всякий раз, когда либо операнд +
является строкой, выполняется конкатенация строки, а не добавление; details in the spec. Если другой операнд не является строкой, он преобразуется в строку. Итак, вы закончили с "1" + "b"
=>"1b"
.
Оператор +
, когда он имеет строку как один из ее аргументов, будет интерпретироваться как оператор «конкатенации» вместо «добавления». Нестроковое значение будет преобразовано в строку и добавлено к или добавлено к строковому значению, в зависимости от того, находится ли он справа или слева (соответственно) оператора.
У вас уже есть ответы, но также проверьте документацию на [Выражения и операторы - Операторы строк] (https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Expressions_and_Operators#String_operators) – Nope
Короткий ответ : потому что это не арифметическая операция :) –