2013-02-25 98 views
1

我正在看一本書並看到一個函數,但我無法理解這些行var numVal = + val;返回val +''=== numVal +'';。任何人都可以幫助解釋一下嗎?提前致謝!什麼是代碼返回val +''=== numVal +''爲?

<!DOCTYPE html> 
<html> 
<body> 
<script> 

function isNumeric(val) { 
    var numVal = +val; // what's this for? 
    return val + '' === numVal + ''; // what's this for? 
} 

function filterNumeric(arr) { 
    var result = []; 

    for(var i=0; i<arr.length; i++) { 
    var val = arr[i]; 
     if (isNumeric(val)) { 
      result.push(val); 
     } 
    } 

    return result; 
} 


var arr = ["a",1, 2, "b"]; 

arr = filterNumeric(arr); 
alert(arr); 


</script> 

</body> 
</html> 

回答

0
var numVal = +val; 

val是一個字符串,numVal將字符串轉換爲數字。(類似於parseInt(),沒有基數魔法)

val + '' === numVal + ''; 

這使用了恆等算===,並檢查是否的valnumval和字符串值(通過添加一個空字符串創建)是相同的。基本上,如果numValNaN,它將評估爲false===確實沒有任何需要,==可以滿足相同的操作。

+0

感謝Manishearth! – Dennisboys 2013-02-25 08:11:39

0

+在Javascript中有很多含義。第一個一元組+適用於數值。第二&第三與空字符串catenating得到數的字符串表示

1

的代碼實際上是:

return (val + '') === (numVal + '') ; 

其轉換爲A === B IE是嚴格等於B,具有相同的數據類型和值。 這裏valnumVal是兩個整數,通過向它們添加'',它們的結果被轉換爲一個字符串。

該語句比較兩個數字字符串,並根據它們是否相等返回truefalse

例如;

'1' === 1  // false 
'1' == 1 // true 
1 + '' === '1' // true 
2 + '' === (1+1) + '' // true 
2

這些是基本上用於類型轉換(強制轉換)的JavaScript技巧。

  • +val是數字一元+操作者施加到val,這迫使它被解釋爲一個數字。如果有幫助,用英文我總是認爲這是「積極val」(不要與絕對值混淆)。另見What's the significant use of unary plus and minus operators?

  • val + ''是二元運算符+適用於兩個對象val和字符串''。即,這是字符串連接運算符。這迫使val被解釋爲一個字符串,然後與空字符串(它什麼都不做)連接。 numVal也一樣。

  • ===是「嚴格等於」相等運算符,它測試值和類型。請注意,這被解析爲(val + '') === (numVal + '')。因爲在這種情況下,你總是會比較兩個字符串,這並不是必須的。 ==就足夠了。


的代碼是等效於以下psudocode:

//var numVal = +val 
var numVal = numeric.Parse(val) or NaN; 

//return val + '' === numVal + '' 
return val.ToString().Equals(numVal.ToString()); 

綜觀一些例子:

 
val  numVal (val + '') (numVal + '') return 
------------------------------------------------------ 
23  23  '23'   '23'   true 
'23' 23  '23'   '23'   true 
'23x' NaN  '23x'  'NaN'   false 
'junk' NaN  'junk'  'NaN'   false 
'1E23' 1e+23 '1E23'  '1e+23'   false 
'1e+23' 1e+23 '1e+23'  '1e+23'   true 
1e+23 1e+23 '1e+23'  '1e+23'   true 

相關問題