为了账号安全,请及时绑定邮箱和手机立即绑定

js 变量赋值

js 变量赋值

鸿蒙传说 2019-03-14 15:10:53
写js的时候遇到一个问题,使用$post获取的返回值,设为data.menu,是个数组另有变量a和b,var ifor (i = 0; i < data.menu.length; i++) {  this.a[i] = data.menu[i]}this.b = data.menu(这是我在.vue文件中的写法,a和b均是data中定义的空数组,故使用this.)结果这两种方式得到的结果不同,在使用上也不同,只有b可以正常使用(作为变量传入component中)在作比较时,若是使用if (a[0].data1 === b[0].data1),if (a[0] === b[0])等方式比较数组元素或内部值,结果为true,但是直接比较if (a === b)却为false,不知何解
查看完整描述

7 回答

?
长风秋雁

TA贡献1757条经验 获得超7个赞

很明显啊,javascript数组不能直接比较是否相等。


查看完整回答
反对 回复 2019-04-02
?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

对象是引用类型,不是同一个引用的对象不相等


查看完整回答
反对 回复 2019-04-02
?
德玛西亚99

TA贡献1770条经验 获得超3个赞

a和b都是引用类型, ===的时候会比较他们引用地址, 循环赋值a的时候属于深拷贝,所以为false


查看完整回答
反对 回复 2019-04-02
?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

js不能直接用==或者===来判断两个数组是否相等,无论是相等还是全等都不行,都会返回false,要判断JS中的两个数组是否相同,需要先将数组转换为字符串,再作比较。


查看完整回答
反对 回复 2019-04-02
?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

你的a是循环出来的,说明a始终只等于最后一组数据。而b是整组数据。你前面的比较会相等,只能说明你判断的那两个值就是相等的。
if (a[0].data1 === b[0].data1),if (a[0] === b[0])这里比较的都是具体的值
if (a === b)这里比较的是整个数据,而a只是最后一个i,b是所有的数据

查看完整回答
反对 回复 2019-04-02
?
繁花不似锦

TA贡献1851条经验 获得超4个赞

[]===[]为false,了解一下


查看完整回答
反对 回复 2019-04-02
?
精慕HU

TA贡献1845条经验 获得超8个赞

当a[i]=menu[i]的时候,a[i]指针指向menu[i],但a仍然指向初始化时的数组并不是menu,而b赋值后指针直接指向menu对应的数组


查看完整回答
反对 回复 2019-04-02
  • 7 回答
  • 0 关注
  • 566 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号