我知道Javascript类型强制(== vs ===)。
我正在查看 filter() 函数。似乎默认情况下它执行类型强制。这是对的吗?这是代码:
var x = [1,2,'hi']
console.log(x.filter(String)); // [ 1, 2, 'hi' ]
console.log(x.filter(Number)); // [ 1, 2]
如果我不希望这种情况,我是否必须向过滤器函数添加回调?我很惊讶这在当前形式下有效,因为我认为它总是需要一个回调参数。
您的代码不会检查元素是字符串还是数字。它的作用是这样的:
String(1)
返回'1'
=> 真实 => 通过过滤器。
Number('hi')
返回 NaN
=> falsy => 不通过过滤器。
你想做的事情可以通过一个函数来实现:
function checkString(el) {
return (typeof el === 'string');
}
String
和Number
全局对象将进行转换(如果可以转换)。 链接。
它说,
"任何要转换为字符串的东西。"
关于Number
.链接
如果参数无法转换为数字,则返回 NaN
NaN被取假,