"document.all" will be considered false when encountered in a Boolean context.

在说document.all之前, 先看看哪些值会转化成falsy.

  • undefined
  • null
  • false
  • +0, -0, and NaN
  • "" 

在这个列表里的值, 在转化为boolean时, 都会成为false, 不在这个表里的值, 都会变为true. 也就是说, 所有对象(即使是空对象), 所有数组(即使是空数组), 所有非空字符串(即使是" ", "0")都是true. 

console.log(Boolean(null));  // false
console.log(Boolean(undefined));  // false
console.log(Boolean(""));  // false
console.log(Boolean(0));  // false
console.log(Boolean(NaN));  // false

console.log(Boolean([]));  // true
console.log(Boolean({}));  // true
console.log(Boolean("0"));  // true

等一下, 这篇文章的标题是什么意思? document.all会被转成false? 这不是一个对象吗, 刚才不是说对象都是true吗? 理论上说是, 但这是个例外, 一般奇葩的设定都会和搅局者IE有关系, 这个也是. document,all最开始是ie的东西, 标准里根本没有, 别的浏览器也不支持, 所以很多老代码判断是不是ie浏览器, 就这样写了

if (document.all) {
  // this is ie
} else {
  // this isn't ie
}

时间久了之后, 别的浏览器也开始支持这个api了, 那之前的判断代码就不能用了, 但是代码已经写了, 难道要全部都找出来改? 所以干脆就不该了, 改设定, 在ie中, document.all 是truth, 在别的浏览器里是 falsy, 所以就出现了这个奇葩设定. 不过这个对象也不是js自己的, 是浏览器提供的, 所以也不能说js的标准有问题, 是浏览器自己改的设定, 怨不得js.

......为什么我想起了 typeof null // object

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值