爲什麼在使用奇數運算符時Javascript輸出爲0?在Javascript中對字符串值使用減法運算符時出現意外結果
減法和加法與字符串有什麼區別?
var x = 1;
console.log(x+'1') // Outputs 11
console.log(x-'1') // Outputs 0 -- but why?
那麼我該如何做數學計算呢?
爲什麼在使用奇數運算符時Javascript輸出爲0?在Javascript中對字符串值使用減法運算符時出現意外結果
減法和加法與字符串有什麼區別?
var x = 1;
console.log(x+'1') // Outputs 11
console.log(x-'1') // Outputs 0 -- but why?
那麼我該如何做數學計算呢?
這是因爲+
是一個連接運算符。所以的JavaScript認爲它是一個連接運算符,而不是一個數學operator.But它是不是這樣用/
,*
,/
等
的+
經營者有在JavaScript 三種含義之一。第一個是添加數字,第二個是連接字符串。當您執行1 + '1'
或'1' + 1
時,操作員將首先將一個不是字符串的操作數轉換爲字符串,因爲另一個操作數已經被評估爲字符串。另一方面,-
運算符只有一個目的,即從左操作數中減去右操作數。這是一個數學運算,所以如果JS引擎具有任何其他數據類型,它將嘗試將兩個操作數轉換爲數字。
我不確定爲什麼對字符串進行類型轉換似乎優先於對數字進行類型轉換,但顯然的確如此。
(在我看來,最有可能的,這是一個純粹的規格決定,而不是其他語言的力學的結果。)
如果你想確保+
運營商充當加法運算符,您可以首先明確地將值轉換爲number
。雖然JavaScript不技術上整數和浮點數之間的區別,兩種功能存在於其它數據類型轉換爲其number
替代者:parseInt()
和parseFloat()
:
const x = 10;
const result = x + parseInt('1'); // 11
const y = 5;
const result2 = y + parseFloat('1.5'); // 6.5
const result3 = y + parseInt('1.5'); // 6
編輯
由於jcaron狀態的評論如下, +
算子具有第三個含義,形式爲unary + operator。如果+
只有一個正確的操作,它會嘗試它的值轉換爲數字幾乎等同parseFloat
是怎麼做的:
+ '1'; // returns 1
+ '1.5'; // returns 1.5
// In the context of the previous example:
const y = 5;
const result2 = y + +'1.5'; // 6.5
與parseFloat DHE不同的是,parseFloat將創建源字符串到的一個子點子字符串將成爲無效的數字,而一元+將始終以整個字符串作爲其輸入:
parseFloat('1.5no-longer-valid'); // 1.5
+ '1.5no-longer-valid'; // NaN
這是因爲+
它也可以用來連接字符串。然後,JS總是會找到更好的方法來根據類型進行正確的類型轉換。在這種情況下,x+'1'
操作將被識別爲string type + string type
。否則,x-'1'
將變成int type - int type
。
如果要使用特定類型,請嘗試使用類型轉換轉換,請鏈接here。
實際上Javascript中有'+'的另一個含義,作爲一個一元運算符,用於強制轉換爲數字。所以你可以寫'x + +'1'' – jcaron
你說得對,我會更新我的答案,謝謝! –
OW!尼斯認爲'x + +'1'' –