图片描述`
//这是zepto源码中的一个函数
function compact(array) {
return array.filter(function(item) {
//下面这句话我觉得是否有些冗余??
//undefined==null
//所以是不是可以直接 return item !=null??
return item !== undefined && item !== null
})
}
function compact(array) {
return array.filter(function(item) {
return item != null
})
}
还有,想告诉我 `0==null` 或者 `false==null`的同学,请把你的测试截图发上来。 ![图片描述][1]
null和undefined在执行比较的时候不会做类型转换,也就其不会转成数学或字符串或boolean
!=是==的求反值
element!=null;在element在null/undefined的情况下返回false,其它情况下返回true
所以以上替换是可以的
原答案有误,两者应该是等价的。
在使用
==
进行相等性判断时,与null
相等的只有undefined
和它自身,与undefined
相等的只有null
和它自身。所以,如果
item != null
,那么说明item一定不是null
且不是undefined
。所以两者等价。
参考:11.9.3 The Abstract Equality Comparison Algorithm
原答案:
不可以。两者并不等价。举个反例就清楚了:比如item
为0
时,原表达式为true
,而你给的表达式为false
。我觉得可以这样写:
!!item
这里不能用这种方法。。这种方法用来将一个值或对象转换为布尔值。
item !== undefined && item !== null
这个语句返回一个布尔值,只有item
是undefined
或者null
时,这个语句才会返回false。这样看来的话,这句话只能这么写。实测得到的结果,题主的方法是可以的。
并不等价,取 item = 0
可以直接
item != null
, 不是!==
。他这样写方便阅读啊。
按你第二种写法是可以,但是第一种更易读。
在n===undefined的时候,n===null也是成立的,所以按理说直接写item!=null也是可以的。但是由于0==null,所以看来这样写还是有缺陷的,也就是说他那样是有道理的。
变量的值
undefined
有两种情况:当访问
未定义
的变量时: 表示该变量不存在
,如果在C
语言中访问一个不存在的变量, 会报错, javascript 对待一个不存在的变量为undefined
.当定义了变量但未给其赋值时, 例如在Chrome中的测试:
null
表示一个变量的值为null
如果你把
test1
,test2
,test3
作为变量放入数组中, 其值是有可能为undefined
或null
的, 因此上面的判断并非是冗余的.我认为第一段代码的真正意图是为了防止过滤掉值为false或0等与undefined或null等价的值