我们通常能看到一个这种面试题,要求在浏览器运行的结果为true
a === 1 && a === 2 && a === 3 && a == 4 && a == 5 && a == 6
虽然第一眼看过去很离谱,但是是可行的
通常我们知道 当你在浏览器环境中,直接使用一个未经定义的变量,这个变量自动声明为全局变量。
所以 我们可以用Object.defineProperty监听window对象下的a属性
当a属性获取值的时候,我们修改拦截获取的值,从而动态修改a的值。
源码如下:
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<script>
// a === 1 && a === 2 && a === 3 && a == 4 && a == 5 && a == 6
let b = 1
Object.defineProperty(window, 'a', {
get() {
console.log('获取a值')
return b++
},
})
document.write(a === 1 && a === 2 && a === 3 && a == 4 && a == 5 && a == 6)
</script>
</body>
</html>