0%

认识 JS document.all

周四了,群里的大佬出了一道题

1
2
3
4
5
6
let foo = // 完成代码


if(!foo) {
console.log(foo + 1); // 2
}

答案

1
2
3
4
5
6
let foo = document.all
foo.valueOf = () => 1

if(!foo) {
console.log(foo + 1); // 2
}

这个题有四个关键点,一个是 document.all,一个是 valueOf,另外两个你猜猜是什么,在文章最后面。

因为

1
2
document.all + 1
// 返回 '[object HTMLAllCollection]1'

另一个关键点是 !xxx 是永远不会有类型转换的。

还有一个关键点是 Falsy,假值。

MDN - Falsy

1
!document.all // 返回 true

总结

我可能是个假前端