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

TypeScript中两个对象为何不相等?属性引号差异解析

TypeScript中对象===判断不相等的原因及解决方法
  • 为什么===判断不相等
    JS/TS里对象属于引用类型,===运算符比的是两个对象的内存引用地址,不是内容。你定义的some和other是两个完全独立的对象,各自占不同的内存空间,所以some === other返回false,自然不会输出"Same"。

  • 属性名的单双引号不影响
    你说other的copy属性用了双引号,这只是写法差异——JS/TS里对象属性名用单引号、双引号甚至不加引号(符合标识符规则时),解析后都是一样的,这也是IDE显示二者属性类型一致的原因,这个差异根本不会导致对象不相等。

  • 如何比较对象内容是否一致
    如果想判断两个对象的内容是不是一样,有几种实用方法:

    1. 手动逐层比较
      针对你的示例,直接比较嵌套的属性值就行:
      let some = {'flag' : {copy : 'true'}};
      let other = {'flag' : {"copy" : 'true'}};
      
      if (some.flag.copy === other.flag.copy) {
        console.log("Same content");
      }
      
    2. 用JSON.stringify(适合简单场景)
      把对象转成JSON字符串再比较,适合结构简单、没有函数或循环引用的对象:
      if (JSON.stringify(some) === JSON.stringify(other)) {
        console.log("Same content");
      }
      
      注意:这种方法搞不定包含undefined、function、Symbol的对象,而且属性顺序不同的话,哪怕内容一样也会返回false。
    3. 用工具函数(复杂场景推荐)
      要是对象结构复杂,可以用lodash.isEqual这种成熟的工具函数,它能深度比较对象内容:
      import isEqual from 'lodash/isEqual';
      
      if (isEqual(some, other)) {
        console.log("Same content");
      }
      

内容的提问来源于stack exchange,提问作者Krishna Padia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 03:55:16