第 65 题: a.b.c.d 和 a['b']['c']['d'],哪个性能更高?
【待学】
第 66 题:ES6 代码转成 ES5 代码的实现思路是什么?
【待学】
通过babel等工具语法转换,本质是以AST为桥梁;通过Babel-polyfill修复不存在的API
第 72 题: 为什么普通 for 循环的性能远远高于 forEach 的性能,请解释其中的原因
【待学】
- for 循环没有任何额外的函数调用栈和上下文;
- forEach函数签名实际上是
array.forEach(function(currentValue, index, arr), thisValue)
它不是普通的 for 循环的语法糖,还有诸多参数和上下文需要在执行的时候考虑进来,可能拖慢性能;
第 75 题:数组里面有10万个数据,取第一个元素和第10万个元素的时间相差多少
相同?
数组元素的存储方式并不是连续的,而是哈希映射关系。数组实际是对象,都是用 key 精确查找哈希表的过程。
第 76 题:输出以下代码运行结果
// example 1
var a={}, b='123', c=123;
a[b]='b';
a[c]='c';
console.log(a[b]);
---------------------
// example 2
var a={}, b=Symbol('123'), c=Symbol('123');
a[b]='b';
a[c]='c';
console.log(a[b]);
---------------------
// example 3
var a={}, b={key:'123'}, c={key:'456'};
a[b]='b';
a[c]='c';
console.log(a[b]);
'b' Symbol('123') 'b' 【错误】
c b c 【正确】
- 对象的键名只能是字符串和 Symbol 类型。
- 其他类型的键名会被转换成字符串类型。
- 对象转字符串默认会调用 toString 方法。
// example 1
var a={}, b='123', c=123;
// b被转换成'123'。
a[b]='b';
// c被转换成'123','c'覆盖掉'b'。
a[c]='c';
console.log(a[b]); //输出'c'。
---------------------
// example 2
var a={}, b=Symbol('123'), c=Symbol('123');
// a[Symbol('123')] = 'b'
a[b]='b';
// a[Symbol('123')] = 'c',symbol不会被覆盖
a[c]='c';
console.log(a[b]); //'b'
---------------------
// example 3
var a={}, b={key:'123'}, c={key:'456'};
//对象类型会调用 toString 方法转换成字符串 [object Object]。
a[b]='b';
//c同样转换成字符串[object Object],其值覆盖掉'b'
a[c]='c';
console.log(a[b]); //'c'