小编And*_*yHu的帖子

Javascript代码技巧:foo.x的价值是什么

我在Github前端访谈问题集中遇到了这个问题:

var foo = {n: 1};
var bar = foo;
foo.x = foo = {n: 2};
Run Code Online (Sandbox Code Playgroud)

问题:foo.x的价值是多少?

答案是undefined.

我做了一些研究,我明白这个问题是(如果我错了,请纠正我):

  • var foo = {n: 1};声明一个foo属性n等于1 的对象.
  • var bar = foo;声明了一个bar引用相同对象的对象foo.
  • foo.x = foo = {n: 2}; 我认为这等于 foo.x = (foo = {n: 2});
  • 然后我得到了foo.x平等undefined.但是,值bar.x是对象{n:2}.

如果barfoo是指同一个对象,为什么bar.x得到的价值,同时foo.xundefined?真正发生了foo.x = foo = {n: 2}; …

javascript object variable-assignment

53
推荐指数
3
解决办法
7081
查看次数

如何防止对象数字属性的自动排序?

为什么我遇到了这个问题:我试图解决算法问题,我需要返回数组中出现的大部分次数.像[5,4,3,2,1,1]应该返回1.并且当两个数字出现同时作为最大外观返回时,第一个出现.像[5,5,2,2,1]返回5因为5首先出现.我使用一个对象来存储每个数字的外观.关键是数字本身.

所以当输入是[5,5,2,2,1]我的对象应该是, Object {5: 2, 2: 2, 1: 1}但实际上我得到了Object {1: 1, 2: 2, 5: 2} 当我使用for..in迭代对象时,我得到2而不是5.所以这就是我问这个问题的原因.

Chrome控制台中出现此问题,我不确定这是否是一个常见问题:当我运行以下代码时

var a = {};
a[0]=1;
a[1]=2;
a[2]=3;
Run Code Online (Sandbox Code Playgroud)

a是:Object {0: 1, 1: 2, 2: 3}

但是,当我颠倒分配的顺序时:

 var a = {};
 a[2]=3;
 a[1]=2;
 a[0]=1;
Run Code Online (Sandbox Code Playgroud)

a也是:Object {0: 1, 1: 2, 2: 3} 数字属性按升序自动排序.我试过像数字属性的前缀或后缀

var a = {};
a['p'+0]=1;
a['p'+1]=2;
a['p'+2]=3;
console.log(a);//Object {p0: 1, p1: 2, p2: 3}
Run Code Online (Sandbox Code Playgroud)

这保持了财产秩序.这是解决问题的最佳方法吗?反正有没有阻止这种自动排序行为?这只发生在Chrome V8 JavaScript引擎中吗?先感谢您!

javascript sorting properties object

10
推荐指数
4
解决办法
9938
查看次数