返回博客

认识 JavaScript document.all

本文讲解 JavaScript 中 `document.all` 的特性,并分析一道关于 `document.all` 和 `valueOf` 方法的代码题,解释其背后的原理,包括 Falsy 值和类型转换。

Mt.r
|

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

let foo = // 完成代码

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

答案

let foo = document.all
foo.valueOf = () => 1

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

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

因为

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

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

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

MDN - Falsy

!document.all // 返回 true

总结

我可能是个假前端