收藏本站腾讯微博新浪微博

经典论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

蓝色理想 最新研发动态 网站开通淘帖功能 - 蓝色理想插件 论坛内容导读一页看论坛 - 给官方提建议

论坛活动及任务 地图和邮件任务 请多用悬赏提问 热夏来袭,选一款蓝色理想的个性T恤吧!

手机上论坛,使用APP获得更好体验 急需前端攻城狮,获得内部推荐机会 论坛开通淘帖功能,收藏终于可以分类了!

搜索
查看: 2313|回复: 13

[讨论] a对象和b对象为何不相等?里面的内容都是一样的啊?

[复制链接]
发表于 2014-7-18 12:37:48 | 显示全部楼层 |阅读模式
发表于 2014-7-18 13:27:35 | 显示全部楼层
a={'len':12}与b={}能一样???这个不是看发的那个a.len与b.len是不是一样的,
回复 支持 反对

使用道具 举报

发表于 2014-7-18 13:46:11 | 显示全部楼层
在JS中,变量主要分为两种:基本类型和引用类型

基本类型主要有undefined、null、boolean、number和string

这些变量保存在栈内存中,都是可以直接比较的

引用类型,也就是对象,这类变量保存在堆内存中

他保存的实际上就是一个地址,可以理解为一个指针

所以即使看上去a={len:12}和b={len:12}表面上相同

但是实际上它们指向的内存地址是不一样的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-18 14:17:41 | 显示全部楼层
DreamJser 发表于 2014-7-18 13:46
在JS中,变量主要分为两种:基本类型和引用类型

基本类型主要有undefined、null、boolean、number和stri ...


那如何比较是否相同呢?
是否想Java那样需要实现equals函数?
回复 支持 反对

使用道具 举报

发表于 2014-7-18 15:20:00 | 显示全部楼层
phonexwu 发表于 2014-7-18 14:17
那如何比较是否相同呢?
是否想Java那样需要实现equals函数?

JS中两个对象相同的话只能通过赋值吧
  1. var a={len:12},
  2.      b=a;
复制代码
如果说你想比较两个对象写法相同的话

我的思路是遍历两个对象,判断二者的所有属性是否相同
   

回复 支持 反对

使用道具 举报

发表于 2014-7-18 17:15:41 | 显示全部楼层
好深奥的说
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-18 20:47:32 | 显示全部楼层
DreamJser 发表于 2014-7-18 15:20
JS中两个对象相同的话只能通过赋值吧如果说你想比较两个对象写法相同的话

我的思路是遍历两个对象,判 ...

jquery中是否有已经封装好的方法来做这件事情?
回复 支持 反对

使用道具 举报

发表于 2014-7-18 20:53:38 | 显示全部楼层
phonexwu 发表于 2014-7-18 20:47
jquery中是否有已经封装好的方法来做这件事情?

不清楚最新版本有没有

不过我想应该不会有,这种方法几乎用不到

倒是复制对象的功能我之前用到过
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-18 22:48:17 | 显示全部楼层
DreamJser 发表于 2014-7-18 20:53
不清楚最新版本有没有

不过我想应该不会有,这种方法几乎用不到

clone 后,分配新内存,修改不会影响原来的对象?
貌似clone用的也不多吧?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-18 22:49:28 | 显示全部楼层
DreamJser 发表于 2014-7-18 13:46
在JS中,变量主要分为两种:基本类型和引用类型

基本类型主要有undefined、null、boolean、number和stri ...

堆是什么?
栈又是什么?

我理解中栈在CPU的寄存器中
而堆是在内存中的?

是这个区别么?
回复 支持 反对

使用道具 举报

发表于 2014-7-19 08:53:25 | 显示全部楼层
phonexwu 发表于 2014-7-18 22:49
堆是什么?
栈又是什么?

这个你可以上网查一下概念

对象复制的确用过一次,当时的目的是复制对象A的全部属性

并改变某个值,但是不能影响到对象A
回复 支持 反对

使用道具 举报

发表于 2014-7-19 09:01:56 | 显示全部楼层
DreamJser 发表于 2014-7-19 08:53
这个你可以上网查一下概念

对象复制的确用过一次,当时的目的是复制对象A的全部属性

http://www.dreamjser.com/demo/game2/game.html

写这个蛋疼的玩意的时候用到过
  1. //拷贝对象
  2.         objToObj:function(obj,copyObj){
  3.                 for(p in obj){
  4.                         copyObj[p]=obj[p];
  5.                 }
  6.         },
  7.         //对象数组拷贝
  8.         objArrayCopy:function(ary,copyAry){
  9.                 for(var i=0;i<ary.length;i++){
  10.                         copyAry[i]={};
  11.                         for(var p in ary[i]){
  12.                                 var a=ary[i][p];
  13.                                 copyAry[i][p]=a;
  14.                         }
  15.                 }
  16.         }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-19 18:52:11 | 显示全部楼层
DreamJser 发表于 2014-7-19 09:01
http://www.dreamjser.com/demo/game2/game.html

写这个蛋疼的玩意的时候用到过

写这么个游戏,果然蛋疼啊:)
回复 支持 反对

使用道具 举报

发表于 2016-8-28 17:23:51 来自手机 | 显示全部楼层
先将对象转化为数组 eval() 然后用数组api arr.join(",")将其输出
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|Archiver|手机版|blueidea.com ( ICP05002321 )  

GMT+8, 2019-12-12 19:20 , Processed in 0.109101 second(s), 8 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表