如果我创建这样的对象:
var obj = {};
obj.prop1 = "Foo";
obj.prop2 = "Bar";
Run Code Online (Sandbox Code Playgroud)
生成的对象总是这样吗?
{ prop1 : "Foo", prop2 : "Bar" }
Run Code Online (Sandbox Code Playgroud)
也就是说,属性是否与我添加它们的顺序相同?
ES6是否为对象属性引入了明确定义的枚举顺序?
var o = {
'1': 1,
'a': 2,
'b': 3
}
Object.keys(o); // ["1", "a", "b"] - is this ordering guaranteed by ES6?
for(let k in o) {
console.log(k);
} // 1 2 3 - is this ordering guaranteed by ES6?
Run Code Online (Sandbox Code Playgroud) 另外,这是样式问题还是功能问题?是偏好问题还是更好?我试图了解目的。
通常我用
let iterable = [10, 20, 30];
iterable.forEach((val) => {
console.log(val);
})
Run Code Online (Sandbox Code Playgroud)
但我看到这种新语法可用。
let iterable = [10, 20, 30];
for (let value of iterable) {
console.log(value);
}
Run Code Online (Sandbox Code Playgroud)
能否提供一个最佳用例的例子,当有人使用它时可能会有所启发?
我正在阅读airbnb javascript指南。有一个特别的声明,说:
不要使用迭代器。首选JavaScript的高阶函数,而不要使用for-in或for-of等循环。
他们给出上述声明的原因是:
这执行了我们不变的规则。处理返回值的纯函数比副作用更容易推论。
我无法区分给出的两种编码实践:
const numbers = [1, 2, 3, 4, 5];
// bad
let sum = 0;
for (let num of numbers) {
sum += num;
}
sum === 15;
// good
let sum = 0;
numbers.forEach((num) => {
sum += num;
});
sum === 15;
Run Code Online (Sandbox Code Playgroud)
谁能解释,为什么应该forEach优先于常规for循环?真的有什么不同?使用常规药有副作用iterators吗?