(a== 1 && a ==2 && a==3) ever evaluate to true? 几种解法分析
栏目: JavaScript · 发布时间: 7年前
内容简介:比较会隐式调用toString或者valueOf方法,如果原始类型的值和对象比较,对象会转为原始类型的值,再进行比较。对象转换成原始类型的值,算法是先调用valueOf方法,如果返回的还是对象,再接着调用toString方法数组也是对象,数组的toString 方法返回一个字符串,该字符串由数组中的每个元素的 toString() 返回值经调用 join() 方法连接(由逗号隔开)组成。
1. Object.defineProperty
var val = 1;
Object.defineProperty(window, 'a', {
configurable: true,
get: function() {
console.log(`触发第${val}次get`);
return val++
}
})
if(a == 1 && a == 2 && a == 3) {
console.log('yes!')
}
触发第1次get
触发第2次get
触发第3次get
yes!
2. toString() valueOf()
const b = {
i: 1,
toString: function () {
return this.i++;
}
}
if(b == 1 && b == 2 && b == 3) {
console.log('Hello World!'); // Hello World!
}
const b = {
i: 1,
valueOf: function () {
return this.i++;
}
}
if(b == 1 && b == 2 && b == 3) {
console.log('Hello World!'); // Hello World!
}
比较会隐式调用toString或者valueOf方法,如果原始类型的值和对象比较,对象会转为原始类型的值,再进行比较。对象转换成原始类型的值,算法是先调用valueOf方法,如果返回的还是对象,再接着调用toString方法
3. array.join = array.shift
var a = [1,2,3]; a.join = a.shift; console.log(a == 1 && a == 2 && a == 3); a == 1 ,此时 a 返回的就是shift返回的第一个元素 1 ,比较完之后 a = [2,3] a == 2 ,此时 a 返回的就是shift返回的第一个元素 2 ,比较完之后 a = [3] a == 3 ,此时 a 返回的就是shift返回的第一个元素 3 ,比较完之后 a = []
数组也是对象,数组的toString 方法返回一个字符串,该字符串由数组中的每个元素的 toString() 返回值经调用 join() 方法连接(由逗号隔开)组成。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Twenty Lectures on Algorithmic Game Theory
Tim Roughgarden / Cambridge University Press / 2016-8-31 / USD 34.99
Computer science and economics have engaged in a lively interaction over the past fifteen years, resulting in the new field of algorithmic game theory. Many problems that are central to modern compute......一起来看看 《Twenty Lectures on Algorithmic Game Theory》 这本书的介绍吧!
XML 在线格式化
在线 XML 格式化压缩工具
html转js在线工具
html转js在线工具