TypeScript中两个对象为何不相等?属性引号差异解析
TypeScript中对象
===判断不相等的原因及解决方法 为什么
===判断不相等
JS/TS里对象属于引用类型,===运算符比的是两个对象的内存引用地址,不是内容。你定义的some和other是两个完全独立的对象,各自占不同的内存空间,所以some === other返回false,自然不会输出"Same"。属性名的单双引号不影响
你说other的copy属性用了双引号,这只是写法差异——JS/TS里对象属性名用单引号、双引号甚至不加引号(符合标识符规则时),解析后都是一样的,这也是IDE显示二者属性类型一致的原因,这个差异根本不会导致对象不相等。如何比较对象内容是否一致
如果想判断两个对象的内容是不是一样,有几种实用方法:- 手动逐层比较
针对你的示例,直接比较嵌套的属性值就行:let some = {'flag' : {copy : 'true'}}; let other = {'flag' : {"copy" : 'true'}}; if (some.flag.copy === other.flag.copy) { console.log("Same content"); } - 用
JSON.stringify(适合简单场景)
把对象转成JSON字符串再比较,适合结构简单、没有函数或循环引用的对象:
注意:这种方法搞不定包含if (JSON.stringify(some) === JSON.stringify(other)) { console.log("Same content"); }undefined、function、Symbol的对象,而且属性顺序不同的话,哪怕内容一样也会返回false。 - 用工具函数(复杂场景推荐)
要是对象结构复杂,可以用lodash.isEqual这种成熟的工具函数,它能深度比较对象内容:import isEqual from 'lodash/isEqual'; if (isEqual(some, other)) { console.log("Same content"); }
- 手动逐层比较
内容的提问来源于stack exchange,提问作者Krishna Padia
相关产品推荐
相关产品推荐

