STYLEGUIDE.md
var foo = {};
var bar = { color: 'orange' };
var foo = [];
Array.var foo = new Array(16);
push to add an item to an array.var foo = [];
foo.push('bar');
'single quotes'.var a, b;
var declaration for each assignment.var a = 1;
var b = 2;
function foo() {
var bar;
console.log('foo bar!');
bar = getBar();
}
function() {
∙∙var name;
}
obj.set('foo', {
foo: 'bar',
});
test('foo-bar', function () {});
var foo = {};
function foo() {}
foo();
// assignments
var foo = bar + 'a';
// conditionals
if (foo === 'bara') {
}
// parameters
function(test, foo) {
}
var foo = [1, 2, 3];
var bar = { a: 'a' };
var foo = [1, 2, 3];
// conditional
if (notFound) {
return 0;
} else {
return 1;
}
switch (condition) {
case 'yes':
// code
break;
}
// loops
for (var key in keys) {
// code
}
for (var i = 0; i < keys.length; i++) {
// code
}
while (true) {
// code
}
try {
// code that throws an error
} catch (e) {
// code that handles an error
}
function foo() {
var obj = {
val: 'test',
};
return {
data: obj,
};
}
if (foo === 1) {
foo();
}
for (var key in keys) {
bar(e);
}
while (true) {
foo();
}
else and its accompanying braces on the same line.if (foo === 1) {
bar = 2;
} else {
bar = '2';
}
if (foo === 1) {
bar = 2;
} else if (foo === 2) {
bar = 1;
} else {
bar = 3;
}
=== and !==.if (notFound) {
return;
}
if (arr.length > 0) {
// code
}
if (foo !== '') {
// code
}
var foo = {
bar: 'bar',
};
foo.bar;
[] when accessing properties with a variable.var propertyName = 'bar';
var foo = {
bar: 'bar',
};
foo[propertyName];
function fooBar() {}
var foo = [1, 2, 3, 4].map((item) => {
return item * 2;
});
arguments object must not be passed or leaked anywhere.
See the reference.
for loop with arguments (instead of slice).function fooBar() {
var args = new Array(arguments.length);
for (var i = 0; i < args.length; ++i) {
args[i] = arguments[i];
}
return args;
}
function fooBar() {
arguments = 3;
}
function fooBar(opt) {
opt = 3;
}
function fooBar(opt) {
var options = opt;
options = 3;
}
Since Babel implements Rest parameters in a non-leaking matter you should use them whenever applicable.
function foo(...args) {
args.forEach((item) => {
console.log(item);
});
}
When decomposing simple arrays or objects, prefer destructuring.
// array destructuring
var fullName = 'component:foo-bar';
var [first, last] = fullName.split(':');
// object destructuring
var person = {
firstName: 'Stefan',
lastName: 'Penner',
};
var { firstName, lastName } = person;
// for single line comments.function foo() {
var bar = 5;
// multiplies `bar` by 2.
fooBar(bar);
console.log(bar);
}