1

我正在看书,看到了一个函数,但我无法理解var numVal = +val;行。返回 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>
4

4 回答 4

2

这些是本质上进行类型转换(强制)的 JavaScript 技巧。

  • 是应用于的+val数字一元运算符,它强制将其解释为数字。如果有帮助,在英语中我总是认为这意味着“积极”(不要与绝对值混淆)。另请参阅一元加号和减号运算符的重要用途是什么?.+valval

  • 是应用于两个对象和字符串的val + ''二元运算符。即,这是字符串连接运算符。这强制被解释为一个字符串,然后与空字符串连接(它什么都不做)。对.+val''valnumVal

  • The===是“严格相等”的相等运算符,它同时测试 value和 type。请注意,这被解析为(val + '') === (numVal + ''). 由于在这种情况下您将始终比较两个字符串,因此这不是必需的;==就足够了。


该代码等效于以下伪代码:

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

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

看一些例子:

val numVal (val + '') (numVal + '') 返回
-------------------------------------------------- ----
23 23 '23' '23' 真
'23' 23 '23' '23' 真
'23x' NaN '23x' 'NaN' 假
'垃圾' NaN '垃圾' 'NaN' 假
'1E23' 1e+23 '1E23' '1e+23' 假
'1e+23' 1e+23 '1e+23' '1e+23' 真
1e+23 1e+23 '1e+23' '1e+23' 真

于 2013-02-25T07:57:05.983 回答
1

代码实际上是:

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

转换为A === Bie 是 A 严格等于 B ,具有相同的数据类型和值。这里valnumVal是两个整数,通过将''它们相加,它们的结果被类型转换为字符串。

该语句比较两个数字字符串,并根据它们是否相等返回true或。false

例如;

'1' === 1     // false
'1' == 1 // true
1 + ''   === '1'  // true
2 + '' ===  (1+1) + ''   // true
于 2013-02-25T07:56:44.723 回答
0

+Javascript 中有很多含义。第一个一元+适用于数值。第二个和第三个是与空字符串连接以获得数字的字符串表示

于 2013-02-25T07:54:48.250 回答
0
 var numVal = +val; 

val是字符串时,numVal将字符串转换为数字。(类似于parseInt(),没有基数魔法)

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

这使用身份运算符并检查和===的字符串值(通过添加空字符串创建)是否相同。基本上,如果是,它将评估为。这里真的没有任何必要,对于相同的操作就足够了。valnumvalnumValNaNfalse=====

于 2013-02-25T07:58:45.313 回答