はじめに 多くの企業や団体がスタイル仕様を公開しています。詳細については、jscs.info を参照してください。以下の内容は主に Airbnb の JavaScript スタイル仕様について言及しています。もちろん、Google などからのプログラミングの提案もあります。
プログラミング スタイル
この章では、ES6 の新しい構文を従来の JavaScript 構文と組み合わせて使用し、合理的で読みやすく保守しやすいコードを作成する方法について説明します。 プログラミングスタイルブロックレベルのスコープ(1)let は var を置き換えます
ES6 では、変数を宣言するための 2 つの新しいコマンド、let と const が提案されています。このうち、let は var を完全に置き換えることができます。これは、2 つのセマンティクスが同じであり、副作用がないためです。'use strict'; if (true) { let x = 'hello'; } for (let i = 0; i < 10; i++) { console.log(i); }
'use strict'; if(true) { console.log(x); // ReferenceError let x = 'hello'; }
(2) グローバル定数とスレッドセーフ
const は、いくつかの理由から let よりも優れています。 1 つは、const がプログラムを読む人に、この変数は変更すべきではないことを思い出させることができるということ、もう 1 つは、const は関数型プログラミングの考え方に沿ったものであり、その操作は値を変更せず、新しい値を作成するだけであるということです。これは、将来の分散操作にも役立ちます。最後の理由は、JavaScript コンパイラーが const を最適化するため、const をより多く使用すると、プログラムの実行効率が向上するということです。つまり、let と const の本質的な違いは、実際には次のとおりです。コンパイラの内部処理。// bad var a = 1, b = 2, c = 3; // good const a = 1; const b = 2; const c = 3; // best const [a, b, c] = [1, 2, 3];
// bad const a = "foobar"; const b = 'foo' + a + 'bar'; // acceptable const c = `foobar`; // good const a = 'foobar'; const b = `foo${a}bar`; const c = 'foobar';
const arr = [1, 2, 3, 4]; // bad const first = arr[0]; const second = arr[1]; // good const [first, second] = arr;
// bad function getFullName(user) { const firstName = user.firstName; const lastName = user.lastName; } // good function getFullName(obj) { const { firstName, lastName } = obj; } // best function getFullName({ firstName, lastName }) { }
// bad function processInput(input) { return [left, right, top, bottom]; } // good function processInput(input) { return { left, right, top, bottom }; } const { left, right } = processInput(input);
// good const a = { k1: v1, k2: v2 }; const b = { k1: v1, k2: v2, };
// if reshape unavoidable const a = {}; Object.assign(a, { x: 3 }); // good const a = { x: null }; a.x = 3;
// good const obj = { id: 5, name: 'San Francisco', [getKey('enabled')]: true, };
// bad const len = items.length; const itemsCopy = []; let i; for (i = 0; i < len; i++) { itemsCopy[i] = items[i]; } // good const itemsCopy = [...items];
const foo = document.querySelectorAll('.foo'); const nodes = Array.from(foo);
(() => { console.log('Welcome to the Internet.'); })();
// bad [1, 2, 3].map(function (x) { return x * x; }); // good [1, 2, 3].map((x) => { return x * x; }); // best [1, 2, 3].map(x => x * x);
// bad const self = this; const boundMethod = function(...params) { return method.apply(self, params); } // acceptable const boundMethod = method.bind(this); // best const boundMethod = (...params) => method.apply(this, params);
// bad function pide(a, b, option = false ) { } // good function pide(a, b, { option = false } = {}) { }
// bad function concatenateAll() { const args = Array.prototype.slice.call(arguments); return args.join(''); } // good function concatenateAll(...args) { return args.join(''); }
// bad function handleThings(opts) { opts = opts || {}; } // good function handleThings(opts = {}) { // ... }
let map = new Map(arr); for (let key of map.keys()) { console.log(key); } for (let value of map.values()) { console.log(value); } for (let item of map.entries()) { console.log(item[0], item[1]); }
import { func1, func2 } from 'moduleA';
// commonJS的写法 var React = require('react'); var Breadcrumbs = React.createClass({ render() { return <nav />; } }); module.exports = Breadcrumbs; // ES6的写法 import React from 'react'; const Breadcrumbs = React.createClass({ render() { return <nav />; } }); export default Breadcrumbs
import myObject from './importModule';
function makeStyleGuide() {} export default makeStyleGuide;
如果模块默认输出一个对象,对象名的首字母应该大写。
const StyleGuide = { es6: { } }; export default StyleGuide;
ESLint是一个语法规则和代码风格的检查工具,可以用来保证写出语法正确、风格统一的代码。和lint的使用差不多
首先,安装ESLint。
npm i -g eslint
然后,安装Airbnb语法规则。
npm i -g eslint-config-airbnb
最后,在项目的根目录下新建一个.eslintrc文件,配置ESLint。
{ "extends": "eslint-config-airbnb" }
比如:
var unusued = 'I have no purpose!'; function greet() { var message = 'Hello, World!'; alert(message); } greet();
然后我们使用命令,就可以检查语法的问题,并给出相关建议。
eslint index.js
$ eslint index.js index.js 1:5 error unusued is defined but never used no-unused-vars 4:5 error Expected indentation of 2 characters but found 4 indent 5:5 error Expected indentation of 2 characters but found 4 indent x 3 problems (3 errors, 0 warnings)
以上就是前端 JavaScript 编程风格浅析 的内容,更多相关内容请关注PHP中文网(www.php.cn)!