DEV Community

StormyTalent
StormyTalent

Posted on

50+ hints JS(ES6+) developer must know (3rd part)

Today, We are going to have some more tips in usage of JS.
String
Use single quotes '' for strings.

// bad const name = "Capt. Janeway"; // bad - template literals should contain interpolation or newlines const name = `Capt. Janeway`; // good const name = 'Capt. Janeway'; 
Enter fullscreen mode Exit fullscreen mode

Strings that cause the line to go over 100 characters should not be written across multiple lines using string concatenation.

// bad const 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.'; // bad const 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.'; // good const 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.'; 
Enter fullscreen mode Exit fullscreen mode

When programmatically building up strings, use template strings instead of concatenation.

// bad function sayHi(name) { return 'How are you, ' + name + '?'; } // bad function sayHi(name) { return ['How are you, ', name, '?'].join(); } // bad function sayHi(name) { return `How are you, ${ name }?`; } // good function sayHi(name) { return `How are you, ${name}?`; } 
Enter fullscreen mode Exit fullscreen mode

Do not unnecessarily escape characters in strings.

// bad const foo = '\'this\' \i\s \"quoted\"'; // good const foo = '\'this\' is "quoted"'; const foo = `my name is '${name}'`; 
Enter fullscreen mode Exit fullscreen mode

Functions
Use named function expressions instead of function declarations.

// bad function foo() { // ... } // bad const foo = function () { // ... }; // good // lexical name distinguished from the variable-referenced invocation(s) const short = function longUniqueMoreDescriptiveLexicalFoo() { // ... }; 
Enter fullscreen mode Exit fullscreen mode

Wrap immediately invoked function expressions in parentheses.

// immediately-invoked function expression (IIFE) (function () { console.log('Welcome to the Internet. Please follow me.'); }()); 
Enter fullscreen mode Exit fullscreen mode

Note: ECMA-262 defines a block as a list of statements. A function declaration is not a statement.

// bad if (currentUser) { function test() { console.log('Nope.'); } } // good let test; if (currentUser) { test = () => { console.log('Yup.'); }; } 
Enter fullscreen mode Exit fullscreen mode

Never name a parameter arguments. This will take precedence over the arguments object that is given to every function scope.

// bad function foo(name, options, arguments) { // ... } // good function foo(name, options, args) { // ... } 
Enter fullscreen mode Exit fullscreen mode

Never use arguments, opt to use rest syntax ... instead.

// bad function concatenateAll() { const args = Array.prototype.slice.call(arguments); return args.join(''); } // good function concatenateAll(...args) { return args.join(''); } 
Enter fullscreen mode Exit fullscreen mode

Use default parameter syntax rather than mutating function arguments.

// really bad function handleThings(opts) { // No! We shouldn’t mutate function arguments. // Double bad: if opts is falsy it'll be set to an object which may // be what you want but it can introduce subtle bugs. opts = opts || {}; // ... } // still bad function handleThings(opts) { if (opts === void 0) { opts = {}; } // ... } // good function handleThings(opts = {}) { // ... } 
Enter fullscreen mode Exit fullscreen mode

Avoid side effects with default parameters.

var b = 1; // bad function count(a = b++) { console.log(a); } count(); // 1 count(); // 2 count(3); // 3 count(); // 3 
Enter fullscreen mode Exit fullscreen mode

Always put default parameters last.

// bad function handleThings(opts = {}, name) { // ... } // good function handleThings(name, opts = {}) { // ... } 
Enter fullscreen mode Exit fullscreen mode

Never use the Function constructor to create a new function.

// bad var add = new Function('a', 'b', 'return a + b'); // still bad var subtract = Function('a', 'b', 'return a - b'); 
Enter fullscreen mode Exit fullscreen mode

Spacing in a function signature.

// bad const f = function(){}; const g = function (){}; const h = function() {}; // good const x = function () {}; const y = function a() {}; 
Enter fullscreen mode Exit fullscreen mode

Never mutate parameters.

// bad function f1(obj) { obj.key = 1; } // good function f2(obj) { const key = Object.prototype.hasOwnProperty.call(obj, 'key') ? obj.key : 1; } 
Enter fullscreen mode Exit fullscreen mode

Never reassign parameters.

// bad function f1(a) { a = 1; // ... } function f2(a) { if (!a) { a = 1; } // ... } // good function f3(a) { const b = a || 1; // ... } function f4(a = 1) { // ... } 
Enter fullscreen mode Exit fullscreen mode

Prefer the use of the spread syntax ... to call variadic functions.

// bad const x = [1, 2, 3, 4, 5]; console.log.apply(console, x); // good const x = [1, 2, 3, 4, 5]; console.log(...x); // bad new (Function.prototype.bind.apply(Date, [null, 2016, 8, 5])); // good new Date(...[2016, 8, 5]); 
Enter fullscreen mode Exit fullscreen mode

Functions with multiline signatures, or invocations, should be indented just like every other multiline list in this guide: with each item on a line by itself, with a trailing comma on the last item.

// bad function foo(bar, baz, quux) { // ... } // good function foo( bar, baz, quux, ) { // ... } // bad console.log(foo, bar, baz); // good console.log( foo, bar, baz, ); 
Enter fullscreen mode Exit fullscreen mode

Thanks for your time.
I hope this blog will give you strong inspirations for your development.
Next time, I will deploy about the Arrow Functions in JS.

Top comments (0)