JavaScript中this关键字解析:两段相似代码结果不同的原因
为什么两段看似相同的代码输出结果不同?
先把你的代码格式化一下,看着更清晰:
var someObj = { data: function() { console.log(this == someObj) // 输出true console.log("Value of this " + this == someObj) // 输出false } }; someObj.data();
核心问题出在运算符优先级上,JavaScript里字符串拼接的+运算符优先级,比相等比较的==要高。这就导致两行代码的执行逻辑完全不一样:
第一行很直接:
this在someObj.data()的调用语境下,指向的就是someObj本身,两个引用指向同一个对象,所以this == someObj返回true,控制台输出true。第二行的执行顺序不是你预想的先判断
this == someObj再拼接字符串,而是先执行"Value of this " + this:当对象和字符串拼接时,JavaScript会自动把对象转成字符串(调用toString()方法,普通对象一般会转成"[object Object]"),所以这部分会变成类似"Value of this [object Object]"的字符串。然后再拿这个字符串和someObj对象做==比较——字符串和对象类型不同,即使把对象转成字符串也和这个长字符串不相等,所以最终返回false。
如果想让第二行先判断this == someObj的结果再拼接成字符串,只需要给比较部分加个括号改变优先级就行:
console.log("Value of this " + (this == someObj)) // 会输出 "Value of this true"
内容的提问来源于stack exchange,提问作者JavaGeek
相关产品推荐
相关产品推荐

