2015-10-05 3 views
4

Я работал над добавлением элемента динамически с помощью jQuery и обнаружил, что при использовании + + он показывает NaN, а следующий текст не добавляется.Почему + + на строки дает странный результат

Я могу догадаться, что каким-то образом + + работает здесь как оператор арифметики плюс и возвращает NaN.

Это не инкрементный оператор, так как между ними есть пробел +.

Мой Вопрос

  1. Что на самом деле происходит вот так он возвращает NaN
  2. Почему + здесь не работает как оператор конкатенации, когда он окружен строками.

$('#message').html('<span>' + + ' new message</span>');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="message"></div>

Такое же поведение можно увидеть в Node.js

> 'a' + + 'b' // aNaN 

Примечание: Я знаю, что я добавил дополнительный + здесь и удаление, что будет работать для меня.

+0

'а' + 'Ъ', как 'а' + NaN + 'Ъ' – Omidam81

+2

@ Omidam81, что это не правильно - просмотрите ответы –

+0

Возможные дубликата [Добавление + "" в строку присоединяет "0"] (http://stackoverflow.com/questions/33894778/adding-to-string-appends-0) – TylerH

ответ

11

Причина заключается в том, потому что, помещая + символ перед строкой, вы пытаетесь преобразовать 'b' строку в число, что приводит к NaN. Код в ваш вопрос эквивалентен следующему:

'a' + Number('b') 

Следовательно Number('b') возвращает NaN, который затем принуждают к строке и прилагаемая к a. Это поведение является неотъемлемой частью JS, поэтому используемая библиотека (будь то jQuery, node или любой другой) не имеет значения.

+0

Спасибо, что имеет смысл сейчас – Tushar

+0

Без проблем рад помочь. –

8

Поскольку второй + оценивается как unary plus оператора как

'<span>' + + ' new message</span>' 
= '<span>' + (+' new message</span>') 
= '<span>' + NaN 
= <span>NaN 
3

Оператор + может быть использован для преобразования переменной в число. Так что это ...

"a" + + "b" 

возвращается aNaN, но это ...

"a" + + "5" 

возвращает a5

Поскольку b не является числом, + b возвращает NaN.

0

Вы можете просто попробовать, как это:

$('#message').html('<span>' + ' new message</span>'); 

или

$('#message').html('<span>' + '' + ' new message</span>'); 

====================== ====================

$('#message').html('<span>' + ' new message</span>');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="message"></div>

+4

Как и ранее удаленный ответ - это не соответствует точке вопроса –

5

javascript сначала попытайтесь преобразовать строку 'b' в число и возвращает NaN, потому что 'b' не может преобразовать в число. Затем 'a' + 'NaN' соединяется с новой строкой 'aNaN'. То же самое в вашем примере:

$('#message').html('<span>' + + ' new message</span>'); 

Javascript пытается преобразовать + ' new message</span>' в число и возвращает NaN. Затем '<span>' + 'NaN' создает новый элемент span и NaN в виде текста.

Посмотрите:

Unary plus (+)

Унарный плюс оператор предшествует операнд и оценивает его операнда, но пытается преобразовать его в число, если оно не уже. Хотя унарное отрицание (-) также может конвертировать не номера, Унарный плюс является самым быстрым и предпочтительным способом преобразования чего-либо в число, поскольку он не выполняет никаких других операций с номером . Он может преобразовывать строковые представления целых чисел и чисел с плавающей запятой, , а также нестроковые значения true, false и null. Целые числа в поддерживаются как десятичные, так и шестнадцатеричные (форматы «0x»). Отрицательные числа поддерживаются (хотя и не для шестнадцатеричных). Если он не может разобрать определенное значение, он будет оцениваться до NaN.

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