for 、for-in 和 forEach
数组
在迭代数组时,相比 for-in
循环, forEach
或 for
循环更具优势。
不推荐:
myArray = ['a', 1, 'etc'];
for (var indexNum in myArray) {
console.log(myArray[indexNum]);
}
var starWars = {
"creatures": [
{
"name": "bantha",
"face": "furry"
},
{
"name": "loth-cat",
"face": "toothy"
}
]
};
for (var i in starWars.creatures) {
console.log(starWars.creatures[i].name);
console.log(starWars.creatures[i].face);
};
推荐:
mySimpleArray = ['a', 1, 'etc'];
mySimpleArray.forEach(function(val) {
console.log(val);
});
var starWars = {
"creatures": [
{
"name": "bantha",
"face": "furry"
},
{
"name": "loth-cat",
"face": "toothy"
}
]
};
starWars.creatures.forEach(function(creature){
console.log(creature.name);
console.log(creature.face)
});
// 或者
myArray = ['a', 1, 'etc'];
for (var indexCount = 0; indexCount < myArray.length; indexCount++) {
console.log(myArray[indexCount]);
};
对象
for-in
循环用于在对象中循环关键词。这样很容易出错,因为, for-in
不会从 0
循环,而是循环对象及其原型链中现存的所有关键词。
如果可以的话,对数据进行整理,以避免迭代对象。如果不可行,将 for-in
循环的内容包裹在条件语句中,以避免迭代原型链。
不推荐:
myObj = {'firstName':'Ada','secondName':'Lovelace'};
for (var key in myObj) {
console.log(myObj[key]);
}
推荐:
myObj = {'firstName':'Ada','lastName':'Lovelace'};
for (var key in myObj) {
if (myObj.hasOwnProperty(key)) {
console.log(myObj[key]);
}
}
多行字符串字面量
不要使用。
编译期间无法妥善删除各行开头的空格,斜杠后的空白会引发棘手的问题,虽然大部分脚本引擎支持该操作,但这并不属于规格中的一部分。
不推荐:
var myPoetry = '一二三四五,\
上山打老虎,\
老虎没打到,\
打到小松鼠,\
让我数一数,\
一二三四五';
推荐:
var myPoetry = '黄河远上白云间,' +
'一片孤城万仞山。' +
'羌笛何须怨杨柳,' +
'春风不度玉门关。';
数组和对象字面量
使用数组和对象字面量,而不是数组和对象构造函数。
不推荐:
var myArray = new Array(x1, x2, x3);
var myObject = new Object();
myObject.a = 0;
推荐:
var myArray = [x1, x2, x3];
var myObject = {
a: 0
};