Почему "струна" - "струна" НАН? [дубликат]
На этот вопрос уже есть ответ здесь:
- почему typeof NaN возвращает "число"? 20 ответов
var sM = "Hello" - "World";
console.log(sM) && console.log(typeof sM);
Я понимаю, почему string-string выводит NaN, но тогда "Hello" - "World"
typeof
является number
.
Это означает, что вычитание строки с другой строкой дает вам тип a number
.
Где тут логика?
3 ответа:
Потому что вычитание имеет дело только с числами, поэтому оно преобразует обе стороны в числа и получает Не число.Почему строка-строка выводит NaN
Но тогда "Hello" - "World" typeof-это число.
NaN
имеет вид число . это стандарт в вычислениях.
Потому что
Имеет смысл, что вы не можете вычесть 2 строки, поэтому их вычитание не является числом (typeof NaN
естьnumber
.NaN
). Что, вероятно, не имеет такого большого смысла, так это то, почемуNaN
(не число) имеет типnumber
. :)Смотритеэтот ответ Для получения более подробной информации о части, которая имеет меньше смысла.
На самом деле это только один из многих случаев, когда операции javascripts дают результаты, которые могут быть неожиданными для новичка. Это происходит из-за неявного типа coersion. Это изменение типа значений, которое происходит автоматически в определенных операциях, где задействованы или ожидаются различные типы. Эти случаи подробно описаны в этой главе из одной из книг вы не знаете JS free, здесь:
Https://github.com/getify/You-Dont-Know-JS/blob/master/types%20&%20grammar/ch4.md
Я определенно рекомендую эту серию книг каждому разработчику JS.