用这道题来理解NaN.
过滤数组假值
(真假美猴王)
删除数组中的所有假值。
在JavaScript中,假值有false、null、0、""、undefined和NaN。
思路:
使用filter()或者slice()非常容易解决false null 0 '' undefined,
然而NaN不同。
想当然的判定:
filter(function(n){
return n!==NaN;
});
结果是NaN还在数组里面。
老子信了你的邪!
逆反心理上来了,
return n==NaN;
数字删掉了……
杠了半天NaN,我是谁,我在哪……
冷静一点!!!!
首先让老子看看NaN是个球:
NaN = not a number,可以理解为仅限于数字范围的“非”。
http://www.shaoqun.com/a/249082.aspx
js中的NaN不和任何值相等,包括自身。
所以可以使用x!=x来判断x是否是NaN,当且仅当x为NaN时,表达式的结果为true。
NaN != NaN //true
alert(false==false) //true
alert(NaN==NaN) //false
NaN的判定:
filter(function(value){
if(value==value)
return value;// 对于非 NaN 值来说,永远会有返回值。
})
行了,NaN你个小妖精,软硬不吃,是非不分。
我们平时社会上遇到这种人怎么办:
翻译成代码就是
value==value
整道题解答:
1
function bouncer(arr) {
for(var i=arr.length-1;i>-1;i--) {
if(!arr[i]) {
arr.splice(i,1);
}
}return arr;
}
2
function bouncer(arr) {
var newArr = [];
newArr=arr.filter(function(n){
return n!==false;
}).filter(function(n){
return n!==null;
}).filter(function(n){
return n!==0;
}).filter(function(n){
return n!=='';
}).filter(function(n){
return n!==undefined;
}).filter(function(n){
return n==n;
});
return newArr;
}
稳了。
网友评论