Почему "струна" - "струна" НАН? [дубликат]


На этот вопрос уже есть ответ здесь:

Это что-то вроде бесконечного цикла для меня.
var sM = "Hello" - "World";
console.log(sM) && console.log(typeof sM);

Я понимаю, почему string-string выводит NaN, но тогда "Hello" - "World" typeof является number.

Это означает, что вычитание строки с другой строкой дает вам тип a number.

Где тут логика?

3 2

3 ответа:

Почему строка-строка выводит NaN

Потому что вычитание имеет дело только с числами, поэтому оно преобразует обе стороны в числа и получает Не число.

Но тогда "Hello" - "World" typeof-это число.

NaN имеет вид число . это стандарт в вычислениях.

Потому что typeof NaN есть number.

Имеет смысл, что вы не можете вычесть 2 строки, поэтому их вычитание не является числом (NaN). Что, вероятно, не имеет такого большого смысла, так это то, почему NaN (не число) имеет тип number. :)

Смотритеэтот ответ Для получения более подробной информации о части, которая имеет меньше смысла.

На самом деле это только один из многих случаев, когда операции javascripts дают результаты, которые могут быть неожиданными для новичка. Это происходит из-за неявного типа coersion. Это изменение типа значений, которое происходит автоматически в определенных операциях, где задействованы или ожидаются различные типы. Эти случаи подробно описаны в этой главе из одной из книг вы не знаете JS free, здесь:

Https://github.com/getify/You-Dont-Know-JS/blob/master/types%20&%20grammar/ch4.md

Я определенно рекомендую эту серию книг каждому разработчику JS.