什么是代码返回val +''=== numVal +''?

时间:2013-02-25 07:52:19

标签: javascript

我正在读一本书并看到了一个函数,但是我无法理解 var numVal = + val; return 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 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

代码实际上是:

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

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

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

例如;

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

答案 2 :(得分:0)

+在Javascript中有很多含义。第一个一元+适用于数值。第二个&amp;第三个是用空字符串连接以获得数字

的字符串表示

答案 3 :(得分:0)

 var numVal = +val; 

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

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

这使用身份运算符===并检查valnumval的字符串值(通过添加空字符串创建)是否相同。基本上,如果numValNaN,则评估为false。这里确实不需要=====对于相同的操作来说已经足够了。