V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
sivacohan
V2EX  ›  JavaScript

js对象怎么比较?

  •  
  •   sivacohan · 2013-07-15 15:08:44 +08:00 · 3901 次点击
    这是一个创建于 3945 天前的主题,其中的信息可能已经有所发展或是发生改变。
    a = {'a':1}
    b = {'a':1}

    a === b 这个是false

    对于复杂对象的比较是比较他们在内存里是不是同一地址吗?
    这个地方应该看点什么。或者查点什么?

    @Mutoo
    8 条回复    1970-01-01 08:00:00 +08:00
    cmonday
        1
    cmonday  
       2013-07-15 16:30:37 +08:00   ❤️ 1
    是的。只有两个内存地址一致的对象才会在`===`判断中得到true

    如果需要判断内部的属性是否一致,只能做递归比较了,比如 underscore 的 isEqual 方法 http://underscorejs.org/#isEqual https://github.com/jashkenas/underscore/blob/master/underscore.js#L844-L938
    sivacohan
        2
    sivacohan  
    OP
       2013-07-15 16:45:10 +08:00
    @cmonday 谢谢,有一个需求是比较两个object的变化。看起来只能自己动手实现一个了。
    coolicer
        3
    coolicer  
       2013-07-15 17:16:39 +08:00
    对象的比较是引用的比较。
    bakac
        4
    bakac  
       2013-07-15 17:35:08 +08:00
    比较字面量 就是toString 之后的
    darasion
        5
    darasion  
       2013-07-15 19:35:06 +08:00
    多数语言都会得到这个结果吧。不光js
    Golevka
        6
    Golevka  
       2013-07-15 19:54:36 +08:00
    @bakac bakac --- An optimizing compiler for baka, written in baka
    miniwade514
        7
    miniwade514  
       2013-07-18 15:34:09 +08:00
    a,b 只是两个引用,比较它们不能达到你的目的。
    Ricepig
        8
    Ricepig  
       2013-07-18 16:05:48 +08:00
    转json以后再比字符串,哈哈哈哈
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2266 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 07:47 · PVG 15:47 · LAX 00:47 · JFK 03:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.