Please support this book: buy it (PDF, EPUB, MOBI) or donate
29. Coding style tips for ECMAScript 6
This chapter lists a few ideas related to ES6 coding style:
varversusletversusconst(details are explained in the chapter on variables):
- Prefer
const. You can use it for all variables whose values never change. - Otherwise, use
let– for variables whose values do change. - Avoid
var.- An arrow function is the superior solution whenever a function fits into a single line:
readFilePromisified(filename).then(text=>console.log(text))
For multi-line functions, traditional functions work well, too (with the caveat of this not being lexical):
readFilePromisified(filename).then(function(text){constobj=JSON.parse(text);console.log(JSON.stringify(obj,null,4));});
Single-line functions tend to be throw-away. If a function isn’t then a traditional function has the advantage that you can name it, which is useful for documentation and debugging.
- Properties in object literals: As soon as an object literal spans multiple lines, I add a comma after the last entry. Such a trailing comma has been legal since ES5. It makes adding, removing and rearranging entries simpler. As a consequence, method definitions always end with
},:
constobj={foo(){},bar(){},};
- Modules: don’t mix default exports and named exports. Your module should either specialize on a single thing or export multiple, named, things.
- Exception: Module with a default export that exposes some internals for testing (via named exports).
- Details are explained in the chapter on modules.
- Format generators as follows:
// Generator function declarationfunction*genFunc(){···}// Generator function expressionconstgenFunc=function*(){···};// Generator method definition in an object literalconstobj={*generatorMethod(){···}};// Generator method definition in a class definitionclassMyClass{*generatorMethod(){···}}
Details are explained in the chapter on generators.
- The chapter on parameter handling has style tips for function signatures:
// Mark optional parameters via the parameter default value `undefined`functionfoo(optional=undefined){···}// Mark required parameters via a function that throws an exceptionfunctionfoo(required=throwException()){···}// Enforcing a maximum arity (variant 1 of 2)functionf(x,y,...empty){// max arity: 2if(empty.length>0){thrownewError();}}// Enforcing a maximum arity (variant 2 of 2)functionf(x,y){// max arity: 2if(arguments.length>2){thrownewError();}}
- In the chapter on callable entities (traditional functions, arrow functions, classes, etc.) there is a section that gives recommendations (when to use which one etc.). Additionally, the ES5 coding style tips in “Speaking JavaScript” are still relevant for ES6.
当前内容版权归 exploringjs.com 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 exploringjs.com .
