javascript中的==你真的懂了吗?
1. ?号
位置怎么写才能输出 true
var a =?
console.log(a == 1 && a == 2 && a == 3);
2. 分析
这道题考察的是等号运算规则
规则:
- 1.特殊
- undefined==null
- NaN !=NaN
- 2.类型相同的
- 比较值
- 3.两端类型不一样
- 均为原始值
- 转换为数字比较
- 一端原始(比如数字,字符串),一端对象
- 首先会把对象转原始后再进行比较 - 先调用 valueOf,若无法转换成原始值,再调用 toString
- 均为原始值
例如:
let obj = {};
console.log(obj.valueOf());
console.log(obj.toString());
console.log(obj == 1); //false
console.log(obj == "[object Object]"); //true
obj 和 1 的类型不同,使用
规则 3,两端类型不一样,一端为对象,一端为原始值,首先会把对象转原始后再进行比较 - 先调用 valueOf,若无法转换成原始值,再调用 toString
那如何才能使 obj==1 为 true 可以通过重写 obj 中 valueOf 这个方法
let obj = {
valueOf: function () {
return 1;
},
};
console.log(obj.valueOf());
console.log(obj == 1); //false
3. 解:
由上面的例子我们可以解决?号
里面究竟填写什么了
var a = {
n: 1,
valueOf: function () {
return this.n++;
},
};
console.log(a == 1 && a == 2 && a == 3);