[英]Why does the “+” operator work in parsing string to number?
從我之前不太記得的情況來看,javascript 會在執行操作之前嘗試將操作數轉換為類似的類型。 但是,當我嘗試在控制台中執行以下操作時:
+'11111'
*'11111'
它們產生不同的結果 - 加法解析,乘法失敗。 這意味着我記得是錯誤的。 + 起作用的確切原因是什么? 我也看到人們在 IIFE 中使用它
+(function() {
})()
//the same as:
;(function() {
})()
+'11111'
結果是數字11111
因為一元 +將其右側的表達式轉換為數字。 但是沒有“一元 *”這樣的東西,所以*'11111'
會拋出一個錯誤。 ( *'11111'
甚至是什么意思?)
至於 IIFE:
;(function() {
})()
;
確保 IIFE在上一條語句結束后開始。 如果不是為了;
, 並且前面的語句沒有以;
結尾;
, 上一行缺少自動分號插入可能會導致錯誤:
const arr = [] (function() { })()
但是在前一行使用不帶分號的+
並不是一個好主意,因為這樣可以將 IIFE 的返回值添加或連接到前一行:
const arr = [] +(function() { })() console.log(arr);
如果你總是在適當的時候把分號放在語句的末尾,那么就沒有必要在 IIFE 的(
之前放任何東西:
const arr = []; (function() { console.log('iife'); })(); console.log(arr);
此處和此處對 JavaScript 一元運算符有很好的解釋和示例。
TDLR:一元運算嘗試將任何東西轉換為數字,如果不能成功將返回 NaN
+3 // returns 3
+'-3' // returns -3
+'3.14' // returns 3.14
+'3' // returns 3
+'0xFF' // returns 255
+true // returns 1
+'123e-5' // returns 0.00123
+false // returns 0
+null // returns 0
+'Infinity' // returns Infinity
+'infinity' // returns NaN
+function(val){ return val } // returns NaN
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.