更新时间:2016年11月17日16时01分 来源:传智播客web前端开发培训学院 浏览次数:
|
1
2
3
|
// bad (albeit way faster)const arr = [1, 2, 3, 4];const len = arr.length;var i = -1;var result = [];while (++i < len) { var n = arr; if (n % 2 > 0) continue; result.push(n * n);}// goodconst arr = [1, 2, 3, 4];const isEven = n => n % 2 == 0;const square = n => n * n;const result = arr.filter(isEven).map(square); |
|
1
2
3
4
5
|
// badconst merge = (target, ...sources) => Object.assign(target, ...sources);merge({ foo: "foo" }, { bar: "bar" }); // => { foo: "foo", bar: "bar" }// goodconst merge = (...sources) => Object.assign({}, ...sources);merge({ foo: "foo" }, { bar: "bar" }); // => { foo: "foo", bar: "bar" } |
|
1
2
|
// badconst toArray = obj => [].slice.call(obj);// goodconst toArray = (() => Array.from ? Array.from : obj => [].slice.call(obj))(); |
|
1
|
// badif (x === undefined || x === null) { ... }// goodif (x == undefined) { ... } |
|
1
2
3
4
5
6
7
8
9
|
// badconst sum = arr => { var sum = 0; var i = -1; for (;arr[++i];) { sum += arr; } return sum;};sum([1, 2, 3]); // => 6// goodconst sum = arr => arr.reduce((x, y) => x + y);sum([1, 2, 3]); // => 6 |
|
01
02
03
04
05
06
07
08
09
10
11
12
|
// badconst createDivs = howMany => { while (howMany--) { document.body.insertAdjacentHTML("beforeend", "<div></div>"); }};createDivs(5);// badconst createDivs = howMany => [...Array(howMany)].forEach(() => document.body.insertAdjacentHTML("beforeend", "<div></div>") );createDivs(5);// goodconst createDivs = howMany => { if (!howMany) return; document.body.insertAdjacentHTML("beforeend", "<div></div>"); return createDivs(howMany - 1);};createDivs(5); |
|
1
|
// badconst sortNumbers = () => Array.prototype.slice.call(arguments).sort();// goodconst sortNumbers = (...numbers) => numbers.sort(); |
|
1
|
const greet = (first, last) => `Hi ${first} ${last}`;const person = ["John", "Doe"];// badgreet.apply(null, person);// goodgreet(...person); |
|
1
|
// bad["foo", "bar"].forEach(func.bind(this));// good["foo", "bar"].forEach(func, this); |
|
01
02
03
04
05
06
07
08
09
10
11
12
|
// badconst person = { first: "John", last: "Doe", greet() { const full = function() { return `${this.first} ${this.last}`; }.bind(this); return `Hello ${full()}`; }}// goodconst person = { first: "John", last: "Doe", greet() { const full = () => `${this.first} ${this.last}`; return `Hello ${full()}`; }} |
|
1
|
// bad[1, 2, 3].map(num => String(num));// good[1, 2, 3].map(String); |
|
1
2
|
const plus1 = a => a + 1;const mult2 = a => a * 2;// badmult2(plus1(5)); // => 12// goodconst pipeline = (...funcs) => val => funcs.reduce((a, b) => b(a), val);const addThenMult = pipeline(plus1, mult2);addThenMult(5); // => 12 |
|
1
2
3
4
5
6
7
8
|
// badconst contains = (arr, value) => Array.prototype.includes ? arr.includes(value) : arr.some(el => el === value);contains(["foo", "bar"], "baz"); // => false// goodconst contains = (() => Array.prototype.includes ? (arr, value) => arr.includes(value) : (arr, value) => arr.some(el => el === value))();contains(["foo", "bar"], "baz"); // => false |
|
1
2
3
|
// badvar me = new Map();me.set("name", "Ben").set("country", "Belgium");// goodconst me = new Map();me.set("name", "Ben").set("country", "Belgium"); |
|
1
2
3
4
5
|
// badvar grade;if (result < 50) grade = "bad";else if (result < 90) grade = "good";else grade = "excellent";// goodconst grade = (() => { if (result < 50) return "bad"; if (result < 90) return "good"; return "excellent";})(); |
|
1
2
3
4
5
6
7
|
const shared = { foo: "foo" };const obj = Object.create(shared, { bar: { value: "bar", enumerable: true }});// badfor (var prop in obj) { if (obj.hasOwnProperty(prop)) console.log(prop);}// goodObject.keys(obj).forEach(prop => console.log(prop)); |
|
01
02
03
04
05
06
07
08
09
10
|
// badconst me = { name: "Ben", age: 30};var meSize = Object.keys(me).length;meSize; // => 2me.country = "Belgium";meSize++;meSize; // => 3// goodconst me = new Map();me.set("name", "Ben");me.set("age", 30);me.size; // => 2me.set("country", "Belgium");me.size; // => 3 |
|
1
2
3
|
// badconst sum = a => b => a + b;sum(5)(3); // => 8// goodconst sum = (a, b) => a + b;sum(5, 3); // => 8 |
|
1
|
// badfoo || doSomething();// goodif (!foo) doSomething(); |
|
1
|
// badvoid function() { /* IIFE */ }();// good(function() { /* IIFE */ }()); |
|
1
|
// badconst n = ~~3.14;// goodconst n = Math.floor(3.14); |
|
1
2
|
// badarr[arr.length - 1];// goodconst first = arr => arr[0];const last = arr => first(arr.slice(-1));last(arr); |
|
1
|
// badconst product = (a, b) => a * b;const triple = n => n * 3;// goodconst product = (a, b) => a * b;const triple = product.bind(null, 3); |
|
1
2
3
4
5
6
7
8
|
// badvar _ = require("underscore");_.compact(["foo", 0]));_.unique(["foo", "foo"]);_.union(["foo"], ["bar"], ["foo"]);// goodconst 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"]); |
