我在Github前端访谈问题集中遇到了这个问题:
Run Code Online (Sandbox Code Playgroud)var foo = {n: 1}; var bar = foo; foo.x = foo = {n: 2};问题: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}.如果bar和foo是指同一个对象,为什么bar.x得到的价值,同时foo.x为undefined?真正发生了foo.x = foo = {n: 2}; …
为什么我遇到了这个问题:我试图解决算法问题,我需要返回数组中出现的大部分次数.像[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引擎中吗?先感谢您!