2015-10-05 106 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

'A' + 'B' 就像是 'A' +的NaN + 'B' – 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,節點還是其他任何)都是不相關的。

+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。