在JavaScript中对Hashmap的以下两次访问是否有任何区别

时间:2018-10-03 11:24:07

标签: javascript

  1. var key = 'a';
    map[key] = 'value';
    
  2. map['a'] = 'value';
    

在Java中,这是在编译过程中自动优化的。我想知道是否有任何JS编译器自己进行这种优化。

2 个答案:

答案 0 :(得分:0)

This answer与此处相关;性能没有区别,因为一个是另一个的别名。通过测试可以看到它们具有相同的性能:

var objectTest = {
  a: 1,
}

console.time('dot');
for (var i = 0; i < 100000000; i++) {
  objectTest.a = objectTest.a + 1;
}
console.timeEnd('dot');

objectTest = {
  a: 1,
}

console.time('bracket');
for (var i = 0; i < 100000000; i++) {
  objectTest['a'] = objectTest['a'] + 1;
}
console.timeEnd('bracket');

答案 1 :(得分:-2)

因此,没有编译器,任何优化的机会都非常低。

var key = 'a';
map['a'] = 'value';

我认为解释器将[a]视为普通变量,因此将其保留在堆中。因此,这两种访问类型是相等的(从成本上来说)。另一方面,应始终避免使用静态语句。