-
对字符串使用单引号 ''
var name = "Bob Parr";
var name = 'Bob Parr';
var fullName = "Bob " + this.lastName;
var fullName = 'Bob ' + this.lastName;
-
超过80个字符的字符串应该使用字符串连接换行
-
注: 如果过度使用,长字符串连接可能会对性能有影响. jsPerf & Discussion
var errorMessage = 'This is a super long error that was thrown because of Batman. When you stop to think about how Batman had anything to do with this, you would get nowhere fast.';
var errorMessage = 'This is a super long error that was thrown because \
of Batman. When you stop to think about how Batman had anything to do \
with this, you would get nowhere \
fast.';
var errorMessage = 'This is a super long error that was thrown because ' +
'of Batman. When you stop to think about how Batman had anything to do ' +
'with this, you would get nowhere fast.';
-
编程时使用join而不是字符串连接来构建字符串,特别是IE: jsPerf.
var items,
messages,
length,
i;
messages = [{
state: 'success',
message: 'This one worked.'
}, {
state: 'success',
message: 'This one worked as well.'
}, {
state: 'error',
message: 'This one did not work.'
}];
length = messages.length;
function inbox(messages) {
items = '<ul>';
for (i = 0; i < length; i++) {
items += '<li>' + messages[i].message + '</li>';
}
return items + '</ul>';
}
function inbox(messages) {
items = [];
for (i = 0; i < length; i++) {
items[i] = messages[i].message;
}
return '<ul><li>' + items.join('</li><li>') + '</li></ul>';
}
[↑]
在这种情况下,中括号操作符成为唯一可行的方式,因此,建议在不知道对象的内部结构的时候(比如要遍历对象来获取某个属性的值),一定要使用中括号操作符,这样可以避免一些意想不到的bug。
-
总是使用 var
来声明变量,如果不这么做将导致产生全局变量,我们要避免污染全局命名空间。
superPower = new SuperPower();
var superPower = new SuperPower();
-
使用一个 var
以及新行声明多个变量,缩进4个空格。
var items = getItems();
var goSportsTeam = true;
var dragonball = 'z';
var items = getItems(),
goSportsTeam = true,
dragonball = 'z';
-
最后再声明未赋值的变量,当你想引用之前已赋值变量的时候很有用。
var i, len, dragonball,
items = getItems(),
goSportsTeam = true;
var i, items = getItems(),
dragonball,
goSportsTeam = true,
len;
var items = getItems(),
goSportsTeam = true,
dragonball,
length,
i;
-
在作用域顶部声明变量,避免变量声明和赋值引起的相关问题。
function() {
test();
console.log('doing stuff..');
var name = getName();
if (name === 'test') {
return false;
}
return name;
}
function() {
var name = getName();
test();
console.log('doing stuff..');
if (name === 'test') {
return false;
}
return name;
}
function() {
var name = getName();
if (!arguments.length) {
return false;
}
return true;
}
function() {
if (!arguments.length) {
return false;
}
var name = getName();
return true;
}
[↑]
-
多行数组和元素初始化时,最好缩进两个空格。
var inset = {
top: 10,
right: 20,
bottom: 15,
left: 12
};
this.rows_ = [
'"Slartibartfast" <fjordmaster@magrathea.com>',
'"Zaphod Beeblebrox" <theprez@universe.gov>',
'"Ford Prefect" <ford@theguide.com>',
'"Arthur Dent" <has.no.tea@gmail.com>',
'"Marvin the Paranoid Android" <marv@googlemail.com>',
'the.mice@magrathea.com'
];
goog.dom.createDom(goog.dom.TagName.DIV, {
id: 'foo',
className: 'some-css-class',
style: 'display:none'
}, 'Hello, world!');
-
尽可能的将所有的函数参数都写在同一行上,但为了保持增强可读性,如果一行超过了80字符的话可适当的换行,甚至可以每个参数都独立一行,记得格式上的优化,比如缩进4个空格和对齐括号。
goog.foo.bar.doThingThatIsVeryDifficultToExplain = function(
veryDescriptiveArgumentNumberOne, veryDescriptiveArgumentTwo,
tableModelEventHandlerProxy, artichokeDescriptorAdapterIterator) {
};
goog.foo.bar.doThingThatIsVeryDifficultToExplain = function(
veryDescriptiveArgumentNumberOne,
veryDescriptiveArgumentTwo,
tableModelEventHandlerProxy,
artichokeDescriptorAdapterIterator) {
};
function foo(veryDescriptiveArgumentNumberOne, veryDescriptiveArgumentTwo,
tableModelEventHandlerProxy, artichokeDescriptorAdapterIterator) {
}
function bar(veryDescriptiveArgumentNumberOne,
veryDescriptiveArgumentTwo,
tableModelEventHandlerProxy,
artichokeDescriptorAdapterIterator) {
}
-
事实上,除了数组和元素的初始化和传递匿名方法以外,都应该相对于上一行表达式的左对齐缩进4个空格,而不是2个
someWonderfulHtml = '' +
getEvenMoreHtml(someReallyInterestingValues, moreValues,
evenMoreParams, 'a duck', true, 72,
slightlyMoreMonkeys(0xfff)) +
'';
thisIsAVeryLongVariableName =
hereIsAnEvenLongerOtherFunctionNameThatWillNotFitOnPrevLine();
thisIsAVeryLongVariableName = 'expressionPartOne' + someMethodThatIsLong() +
thisIsAnEvenLongerOtherFunctionNameThatCannotBeIndentedMore();
someValue = this.foo(
shortArg,
'Some really long string arg - this is a pretty common case, actually.',
shorty2,
this.bar());
if (searchableCollection(allYourStuff).contains(theStuffYouWant) &&
!ambientNotification.isActive() && (client.isAmbientSupported() ||
client.alwaysTryAmbientAnyways())) {
ambientNotification.activate();
}
-
二元和三元操作符
var x = a ? b : c;
var y = a ?
longButSimpleOperandB : longButSimpleOperandC;
var z = a ?
moreComplicatedB :
moreComplicatedC;
-
大括号前放一个空格
function test(){
console.log('test');
}
function test() {
console.log('test');
}
dog.set('attr',{
age: '1 year',
breed: 'Bernese Mountain Dog'
});
dog.set('attr', {
age: '1 year',
breed: 'Bernese Mountain Dog'
});
-
在做长方法链时使用缩进.
$('#items').find('.selected').highlight().end().find('.open').updateCount();
$('#items')
.find('.selected')
.highlight()
.end()
.find('.open')
.updateCount();
var leds = stage.selectAll('.led').data(data).enter().append('svg:svg').class('led', true)
.attr('width', (radius + margin) * 2).append('svg:g')
.attr('transform', 'translate(' + (radius + margin) + ',' + (radius + margin) + ')')
.call(tron.led);
var leds = stage.selectAll('.led')
.data(data)
.enter().append('svg:svg')
.class('led', true)
.attr('width', (radius + margin) * 2)
.append('svg:g')
.attr('transform', 'translate(' + (radius + margin) + ',' + (radius + margin) + ')')
.call(tron.led);
[↑]
-
不要将逗号放前面
var once
, upon
, aTime;
var once,
upon,
aTime;
var hero = {
firstName: 'Bob'
, lastName: 'Parr'
, heroName: 'Mr. Incredible'
, superPower: 'strength'
};
var hero = {
firstName: 'Bob',
lastName: 'Parr',
heroName: 'Mr. Incredible',
superPower: 'strength'
};
-
不要加多余的逗号,这可能会在IE下引起错误,同时如果多一个逗号某些ES3的实现会计算多数组的长度。
var hero = {
firstName: 'Kevin',
lastName: 'Flynn',
};
var heroes = [
'Batman',
'Superman',
];
var hero = {
firstName: 'Kevin',
lastName: 'Flynn'
};
var heroes = [
'Batman',
'Superman'
];
[↑]