フロントエンドコードガイド(三)
7601 ワード
フロントエンドコードガイド(一)フロントエンドコードガイド(二)フロントエンドコードガイド(三)
javascript
注:`下のES 6の文法.
パフォーマンス
性能の中で最も重要なのは可読性と正確性と表現性です.JavaScriptは基本的にいつまでもあなたの性能のボトルネックになりません.画像圧縮、ネットワークアクセス、リフローなどによって性能を最適化できます.文章を読んだら一つしか覚えられません.これを覚えてください.
できるだけピュアな関数を維持します.理想的には、副作用のない、外部データを使用しない、新しいオブジェクト(既存のものを変更するのではなく)の関数を作成します.
できるだけ原生に頼る方法.
必要でない時は隠し強制をしないでください.
サイクルを使わないでください.彼らはあなたに可変のオブジェクトを使うように強制します.
オブジェクトを忘れました.残りのパラメータを使うのがより良い選択です.の残りのパラメータは名前が付けられていますので、この関数のパラメータにもっと注意してください. の残りのパラメータは本物の配列であり、それがより使いやすくなる.
Apple()関数を忘れ、代わりに拡張機能を使います.
bind関数を忘れました.ここにもっと慣用的な方法があります.
必要でない時は入れ子関数を使用しないでください.
関数のマルチレベル呼び出しを回避し、構造を合理的に使用して問題を解決します.
キャッシュ機能テスト、大データ構造、および任意の高価な動作.
オブジェクトは合法的な用例ですが、mapはより強力な選択です.
多くの開発者にとって、コリー化は海外の風格を持つ強力な形式です.合理的に使うのはとてもいいですが、乱用しないでください.
表面が巧妙に見える技術を使って、コードの意味が曖昧にならないようにしてください.
いくつかの小型、高さの組み合わせ、再利用可能な関数を作成することに抵抗しないでください.
依存を減らす.第三者のコードはあなたが知らないので、コピー可能な関数のいくつかのために第三者ファイル全体をロードしないでください.
javascript
注:`下のES 6の文法.
パフォーマンス
性能の中で最も重要なのは可読性と正確性と表現性です.JavaScriptは基本的にいつまでもあなたの性能のボトルネックになりません.画像圧縮、ネットワークアクセス、リフローなどによって性能を最適化できます.文章を読んだら一つしか覚えられません.これを覚えてください.
// (albeit way faster)
const arr = [1, 2, 3, 4];
const len = arr.length;
var i = -1;
var result = [];
while (++i < len) {
var n = arr[i];
if (n % 2 > 0) continue;
result.push(n * n);
}
//
const arr = [1, 2, 3, 4];
const isEven = n => n % 2 == 0;
const square = n => n * n;
const result = arr.filter(isEven).map(square);
領域なしできるだけピュアな関数を維持します.理想的には、副作用のない、外部データを使用しない、新しいオブジェクト(既存のものを変更するのではなく)の関数を作成します.
//
const merge = (target, ...sources) => Object.assign(target, ...sources);
merge({ foo: "foo" }, { bar: "bar" }); // => { foo: "foo", bar: "bar" }
//
const merge = (...sources) => Object.assign({}, ...sources);
merge({ foo: "foo" }, { bar: "bar" }); // => { foo: "foo", bar: "bar" }
原生できるだけ原生に頼る方法.
//
const toArray = obj => [].slice.call(obj);
//
const toArray = (() =>
Array.from ? Array.from : obj => [].slice.call(obj)
)();
強制必要でない時は隠し強制をしないでください.
//
if (x === undefined || x === null) { ... }
//
if (x == undefined) { ... }
ループサイクルを使わないでください.彼らはあなたに可変のオブジェクトを使うように強制します.
array.prototype
方法に依存することができます.//
const sum = arr => {
var sum = 0;
var i = -1;
for (;arr[++i];) {
sum += arr[i];
}
return sum;
};
sum([1, 2, 3]); // => 6
//
const sum = arr =>
arr.reduce((x, y) => x + y);
sum([1, 2, 3]); // => 6
循環を避けることができない場合、またはarray.prototype
方法を使用することは、あなたにとって虐待された行為であり、再帰的な方法を使用することができます.//
const createDivs = howMany => {
while (howMany--) {
document.body.insertAdjacentHTML("beforeend", "<div></div>");
}
};
createDivs(5);
//
const createDivs = howMany =>
[...Array(howMany)].forEach(() =>
document.body.insertAdjacentHTML("beforeend", "<div></div>")
);
createDivs(5);
//
const createDivs = howMany => {
if (!howMany) return;
document.body.insertAdjacentHTML("beforeend", "<div></div>");
return createDivs(howMany - 1);
};
createDivs(5);
パラメータオブジェクトを忘れました.残りのパラメータを使うのがより良い選択です.
//
const sortNumbers = () =>
Array.prototype.slice.call(arguments).sort();
//
const sortNumbers = (...numbers) => numbers.sort();
AppleApple()関数を忘れ、代わりに拡張機能を使います.
const greet = (first, last) => `Hi ${first} ${last}`;
const person = ["John", "Doe"];
//
greet.apply(null, person);
//
greet(...person);
結合bind関数を忘れました.ここにもっと慣用的な方法があります.
//
["foo", "bar"].forEach(func.bind(this));
//
["foo", "bar"].forEach(func, this);
//
const person = {
first: "John",
last: "Doe",
greet() {
const full = function() {
return `${this.first} ${this.last}`;
}.bind(this);
return `Hello ${full()}`;
}
}
//
const person = {
first: "John",
last: "Doe",
greet() {
const full = () => `${this.first} ${this.last}`;
return `Hello ${full()}`;
}
}
トップレベルの関数必要でない時は入れ子関数を使用しないでください.
//
[1, 2, 3].map(num => String(num));
//
[1, 2, 3].map(String);
構造関数のマルチレベル呼び出しを回避し、構造を合理的に使用して問題を解決します.
const plus1 = a => a + 1;
const mult2 = a => a * 2;
//
mult2(plus1(5)); // => 12
//
const pipeline = (...funcs) => val => funcs.reduce((a, b) => b(a), val);
const addThenMult = pipeline(plus1, mult2);
addThenMult(5); // => 12
キャッシュキャッシュ機能テスト、大データ構造、および任意の高価な動作.
//
const contains = (arr, value) =>
Array.prototype.includes
? arr.includes(value)
: arr.some(el => el === value);
contains(["foo", "bar"], "baz"); // => false
//
const contains = (() =>
Array.prototype.includes
? (arr, value) => arr.includes(value)
: (arr, value) => arr.some(el => el === value)
)();
contains(["foo", "bar"], "baz"); // => false
変数arguments
はconst
より優れています.let
より優れています.//
var me = new Map();
me.set("name", "Ben").set("country", "Belgium");
//
const me = new Map();
me.set("name", "Ben").set("country", "Belgium");
条件var
はif+return
とif...else if...else
より優れています.//
var grade;
if (result < 50)
grade = " ";
else if (result < 90)
grade = " ";
else
grade = "excellent";
//
const grade = (() => {
if (result < 50)
return " ";
if (result < 90)
return " ";
return "excellent";
})();
オブジェクトの繰り返しswitch
の使用を避けるconst shared = { foo: "foo" };
const obj = Object.create(shared, {
bar: {
value: "bar",
enumerable: true
}
});
//
for (var prop in obj) {
if (obj.hasOwnProperty(prop))
console.log(prop);
}
//
Object.keys(obj).forEach(prop => console.log(prop));
対象をmapsとするオブジェクトは合法的な用例ですが、mapはより強力な選択です.
//
const me = {
name: "Ben",
age: 30
};
var meSize = Object.keys(me).length;
meSize; // => 2
me.country = "Belgium";
meSize++;
meSize; // => 3
//
const me = new Map();
me.set("name", "Ben");
me.set("age", 30);
me.size; // => 2
me.set("country", "Belgium");
me.size; // => 3
コリ化多くの開発者にとって、コリー化は海外の風格を持つ強力な形式です.合理的に使うのはとてもいいですが、乱用しないでください.
//
const sum = a => b => a + b;
sum(5)(3); // => 8
//
const sum = (a, b) => a + b;
sum(5, 3); // => 8
可読性表面が巧妙に見える技術を使って、コードの意味が曖昧にならないようにしてください.
//
foo || doSomething();
//
if (!foo) doSomething();
//
void function() { /* IIFE */ }();
//
(function() { /* IIFE */ }());
//
const n = ~~3.14;
//
const n = Math.floor(3.14);
コード多重化いくつかの小型、高さの組み合わせ、再利用可能な関数を作成することに抵抗しないでください.
//
arr[arr.length - 1];
//
const first = arr => arr[0];
const last = arr => first(arr.slice(-1));
last(arr);
//
const product = (a, b) => a * b;
const triple = n => n * 3;
//
const product = (a, b) => a * b;
const triple = product.bind(null, 3);
依存性依存を減らす.第三者のコードはあなたが知らないので、コピー可能な関数のいくつかのために第三者ファイル全体をロードしないでください.
//
var _ = require("underscore");
_.compact(["foo", 0]));
_.unique(["foo", "foo"]);
_.union(["foo"], ["bar"], ["foo"]);
//
const compact = arr => arr.filter(el => el);
const unique = arr => [...Set(arr)];
const union = (...arr) => unique([].concat(...arr));
compact(["foo", 0]);
unique(["foo", "foo"]);
union(["foo"], ["bar"], ["foo"]);
本文がいいと思ったら、下のオススメをクリックしてください.