You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:43:29