什么是代码返回val +''=== numVal +''为?
我正在看一本书并看到一个函数,但我无法理解这些行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>
var numVal = +val;
当val
是一个字符串,numVal
将字符串转换为数字。(类似于parseInt()
,没有基数魔法)
val + '' === numVal + '';
这使用了恒等算===
,并检查是否的val
numval
和字符串值(通过添加一个空字符串创建)是相同的。基本上,如果numVal
是NaN
,它将评估为false
。 ===
确实没有任何需要,==
可以满足相同的操作。
+
在Javascript中有很多含义。第一个一元组+
适用于数值。第二&第三与空字符串catenating得到数的字符串表示
的代码实际上是:
return (val + '') === (numVal + '') ;
其转换为A === B
IE是严格等于B,具有相同的数据类型和值。 这里val
和numVal
是两个整数,通过向它们添加''
,它们的结果被转换为一个字符串。
该语句比较两个数字字符串,并根据它们是否相等返回true
或false
。
例如;
'1' === 1 // false
'1' == 1 // true
1 + '' === '1' // true
2 + '' === (1+1) + '' // true
这些是基本上用于类型转换(强制转换)的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
感谢Manishearth! – Dennisboys 2013-02-25 08:11:39