还有另一个关于typeof的问题。它不包括这些例子。
为什么不使用arrNew在第一个filter()中使用0进行类型操作?
它在带有arrNew02的第二个过滤器()中工作。
如果我在if语句中返回之前放入一个console.log语句,它确实将0识别为“number”类型。
function filterArray(arr){
var arrNew = arr.filter(function(item){
if(typeof item === "number"){
console.log("typeof item: " + item + " " + typeof item);
return item;
}
});
console.log("arrNew: " + arrNew);
var arrNew02 = arr.filter(function(item){
return(typeof item === "number");
});
console.log("arrNew02: " + arrNew02);
}
filterArray([1, "a", "b", 0, 15]);
// This should return [1, 0, 15]
我尝试使用isNaN。但是,它错过了这个例子中的字符串数字。它将返回“1”。
var arrNew03 = arr.filter(function(item){
if(isNaN(item) === false){
return item;
}
});
console.log("arrNew03: " + arrNew03);
filterArray([1, 2, "aasf", "1", "123", 123]);
// This should return [1, 2, 123]
那么,查找项目类型的最佳方法是什么? 数字,字符串等有不同的方法吗? 我确实阅读了MDN文档。在最后,它有一个链接,为什么typeof不再安全。但是,我不认为这里的相关讨论是相关的。 http://es-discourse.com/t/why-typeof-is-no-longer-safe/15
答案 0 :(得分:0)
Array#filter
需要truthy值才能将元素包含在新数组中。
返回值为零的项目不包括此项目。
<强>描述强>
filter()
为数组中的每个元素调用一次提供的回调函数,并构造一个包含callback
返回a value that coerces totrue
的所有值的新数组。仅为已分配值的数组的索引调用callback
;对于已删除的索引或从未分配过值的索引,不会调用它。不会通过callback
测试的数组元素被简单地跳过,并且不包含在新数组中。
答案 1 :(得分:0)
数字0
是唯一可以转换为布尔值false
的数字。所有其他数字都投放到true
。如果您为过滤结果返回item
,并且item
已解析为false
(如果item === 0
将会结算),则该项目将被过滤掉。
您需要在首次true
来电中退回item
而不是arr.filter
。