这道题是我在字母站看学习视频的时候看到的,主要考察的是对于非严格相等==的判断原理的认识,以及对JS对象属性知识的了解。
题目如下:
也就是——
如何定义a,使得判断式(a == 1&&a == 2&&a == 3)能够成立?(即结果为true)
解法1:
核心思想:
不全等==作比较的时候,首先会把对象a转为字符串类型再作比较,即a .toString()。
因此,我们需要重构一个私有方法toString(),使其不调用对象原型上的toString()方法。
var a = {
n: 0,
//私有属性方法
toString: function() {
return ++this.n
}
}
//此时的a.toString()调用的不再是Object.prototype.toString(),而是自己私有的属性方法toString();
if(a == 1 && a == 2 && a ==3) {
console.log("OK")
}
运行结果如下,成功!
解法2:
核心思想:
同解法1,需要重新构建对象的私有属性方法toString()
shift:删除数组第一项,并把删除的内容返回,原有数组改变。
var a = [1,2,3];
a.toString = a.shift;
//此时的a.toString()调用的不再是Object.prototype.toString(),而是自己私有的属性方法toString();
if(a == 1 && a == 2 && a ==3) {
console.log("OK")
}
运行结果如下,成功!
解法3:
核心思想:
利用Object的defineProperty属性
Object.defineProperty(window,'a',{
get:function() {
//this指向window.a
this.value ? this.value++ : this.value = 1;
return this.value;
}
})
if(a == 1 && a == 2 && a ==3) {
console.log("OK")
}
运行结果如下,成功!
【 以上是本人学习探索中记下的笔记,仅供分享学习。如有雷同,无意冒犯,请务必及时告知,立即更正!】