我正在读一本书并看到了一个函数,但是我无法理解 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>
答案 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,具有相同的数据类型和值。
此处val
和numVal
是两个整数,通过向其添加''
,它们的结果将被转换为字符串。
该语句比较两个数字字符串,并根据它们是否相等返回true
或false
。
例如;
'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 + '';
这使用身份运算符===
并检查val
和numval
的字符串值(通过添加空字符串创建)是否相同。基本上,如果numVal
为NaN
,则评估为false
。这里确实不需要===
,==
对于相同的操作来说已经足够了。