假如:a===1 && a===2 && a===3; 那么 a 是什么?
前言
文章提供视频版啦,点击直接查看
hello
,大家好,我是 sunday
。
今天遇到了一个非常有意思的问题,跟大家分享一下。
咱们来看这段代码:
a===1 && a===2 && a===3
假设上面的表达式成立,那么问:a 是什么?
正文
ok,我们来说一下这个问题的解答。
想要解决这个问题,那么我们首先要知道 JavaScript
中的类型转换和比较运算符的优先级。
在 JavaScript
中,表达式的运算顺序是 从左到右。因此,在这个表达式中,先执行 a===1
的比较运算符,如果它返回 false
,整个表达式就会返回 false
,也就是逻辑中断。
如果 a
的值是 1
,则比较运算符返回 true
,那么就会继续执行下一个逻辑运算符 &&,
接着执行 a===2
的比较运算符,如果它返回 false
,则整个表达式返回 false
,逻辑中断。
以此类推,以此类推,所以 a
的值应该是动态变化的,并且应该依次为 1、2、3
。只有这样才会出现 a===1 && a===2 && a===3;
返回 true
的情况。
那么 如何让 a
的值动态变化,就是咱们解决这个问题的关键。
我们在 一小时读完《JavaScript权威指南(第7版)》上 和 一小时读完《深入理解现代 JavaScript》,彻底掌握 ES6 之后 JavaScript 新特性! 中都讲到过,对象的方法存在 get
标记,一旦方法存在 get
标记,那么我们就可以像调用对象的属性一样,调用这个方法。
那么说到这里,肯定很多小伙伴都想到这个问题怎么解决了。
我们直接来看代码:
const obj = {
// get 标记
get a() {
this.value = this.value || 1;
return this.value++;
}
};
console.log(obj.a === 1 && obj.a === 2 && obj.a === 3); // true
在这段代码中,我们创建了一个对象 obj
,它包含一个被 get
标记的方法 a
。那么此时只要执行 obj.a
就会调用 a
方法,完成 value
自增的操作。从而得到咱们期望的结果。
总结
这是一个非常有意思的问题。除了上面这种方案之后,还有很多其他的实现方案。大家可以开动脑筋,想一想别的方案都有什么呢?
答案留在评论区,咱们
来源:juejin.cn/post/7223586933881421861