关于 (a ==1 && a == 2 && a == 3) == true 的问题

不久前在网上看到一个这样的提问:

有没有可能使 a == 1 && a == 2 && a == 3 的结果为 true ???

其实,大部分语言在特定情况下都是可以做到类似逻辑的。譬如 C#,C++ 等语言可以通过重载运算符来自定义的判断逻辑实现,JavaScript 等语言由于其 == 运算符的特殊性,可以直接重写其方法来实现。

以 JavaScript 语言为例

javascript 语言的 === 运算符相当于大多数其他运算符的 == 运算符,反而,其 == 运算符由于忽略变量类型,实际上, == 运算符是先调用 === 运算符判断,为 false 时,再依次调用 valueOf 方法,toString 方法进行判断。

所以,只需要简单的重写 valueOf 方法或者 toString 方法即可达到目的

var a = {i:1, 
	toString(){
		return a.i ++;
		}
}

console.log(a == 1 && a == 2 && a == 3);

运行结果:

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章