# 1. 带有多个条件的 if 语句
把多个值放在一个数组中,然后调用数组的 includes 方法。
|  |  | 
|  | if (x === 'abc' || x === 'def' || x === 'ghi' || x ==='jkl') { | 
|  |      | 
|  | } | 
|  |  | 
|  | if (['abc', 'def', 'ghi', 'jkl'].includes(x)) { | 
|  |     | 
|  | } | 
# 2. 简化 if true...else
对于不包含大逻辑的 if-else 条件,可以使用下面的快捷写法。我们可以简单地使用三元运算符来实现这种简化。
|  |  | 
|  | let test: boolean; | 
|  | if (x > 100) { | 
|  |     test = true; | 
|  | } else { | 
|  |     test = false; | 
|  | } | 
|  |  | 
|  | let test = (x > 10) ? true : false; | 
|  |  | 
|  | let test = x > 10; | 
|  | console.log(test); | 
如果有嵌套的条件,可以这么做。
|  | let x = 300, | 
|  | test2 = (x > 100) ? 'greater 100' : (x < 50) ? 'less 50' : 'between 50 and 100'; | 
|  | console.log(test2);  | 
# 3. 声明变量
当我们想要声明两个具有相同的值或相同类型的变量时,可以使用这种简写。
|  |  | 
|  | let test1; | 
|  | let test2 = 1; | 
|  |  | 
|  | let test1, test2 = 1; | 
# 4. null、undefined 和空值检查
当我们创建了新变量,有时候想要检查引用的变量是不是为非 null 或 undefined。JavaScript 确实有一个很好的快捷方式来实现这种检查。
|  |  | 
|  | if (test1 !== null || test1 !== undefined || test1 !== '') { | 
|  |     let test2 = test1; | 
|  | } | 
|  |  | 
|  | let test2 = test1 || ''; | 
# 5. null 检查和默认赋值
|  | let test1 = null, | 
|  |     test2 = test1 || ''; | 
|  | console.log("null check", test2);  | 
# 6. undefined 检查和默认赋值
|  | let test1 = undefined, | 
|  |     test2 = test1 || ''; | 
|  | console.log("undefined check", test2);  | 
一般值检查
|  | let test1 = 'test', | 
|  |     test2 = test1 || ''; | 
|  | console.log(test2);  | 
另外,对于上述的 4、5、6 点,都可以使用??操作符。
如果左边值为 null 或 undefined,就返回右边的值。默认情况下,它将返回左边的值。
|  | const test= null ?? 'default'; | 
|  | console.log(test); | 
|  |  | 
|  | const test1 = 0 ?? 2; | 
|  | console.log(test1); | 
|  |  | 
# 7. 给多个变量赋值
当我们想给多个不同的变量赋值时,这种技巧非常有用。
|  |  | 
|  | let test1, test2, test3; | 
|  | test1 = 1; | 
|  | test2 = 2; | 
|  | test3 = 3; | 
|  |  | 
|  | let [test1, test2, test3] = [1, 2, 3]; | 
# 8. 简便的赋值操作符
在编程过程中,我们要处理大量的算术运算符。这是 JavaScript 变量赋值操作符的有用技巧之一。
|  |  | 
|  | test1 = test1 + 1; | 
|  | test2 = test2 - 1; | 
|  | test3 = test3 * 20; | 
|  |  | 
|  | test1++; | 
|  | test2--; | 
|  | test3 *= 20; | 
# 9. if 判断值是否存在
这是我们都在使用的一种常用的简便技巧,在这里仍然值得再提一下。
|  |  | 
|  | if (test1 === true) or if (test1 !== "") or if (test1 !== null) | 
|  |  | 
|  | if (test1) | 
注意:如果 test1 有值,将执行 if 之后的逻辑,这个操作符主要用于 null 或 undefinded 检查。
# 10. 用于多个条件判断的 && 操作符
如果只在变量为 true 时才调用函数,可以使用 && 操作符。
|  |  | 
|  | if (test1) { | 
|  |  callMethod();  | 
|  | }  | 
|  |  | 
|  | test1 && callMethod(); | 
# 11. for each 循环
这是一种常见的循环简化技巧。
|  |  | 
|  | for (var i = 0; i < testData.length; i++) | 
|  |  | 
|  | for (let i in testData) or  for (let i of testData) | 
遍历数组的每一个变量。
|  | function testData(element, index, array) { | 
|  |   console.log('test[' + index + '] = ' + element); | 
|  | } | 
|  | [11, 24, 32].forEach(testData); | 
|  |  | 
# 12. 比较后返回
我们也可以在 return 语句中使用比较,它可以将 5 行代码减少到 1 行。
|  |  | 
|  | let test; | 
|  | function checkReturn() { | 
|  |     if (!(test === undefined)) { | 
|  |         return test; | 
|  |     } else { | 
|  |         return callMe('test'); | 
|  |     } | 
|  | } | 
|  | var data = checkReturn(); | 
|  | console.log(data);  | 
|  | function callMe(val) { | 
|  |     console.log(val); | 
|  | } | 
|  |  | 
|  | function checkReturn() { | 
|  |     return test || callMe('test'); | 
|  | } | 
# 13. 箭头函数
|  |  | 
|  | function add(a, b) {  | 
|  |    return a + b;  | 
|  | }  | 
|  |  | 
|  | const add = (a, b) => a + b; | 
更多例子:
|  | function callMe(name) { | 
|  |   console.log('Hello', name); | 
|  | } | 
|  | callMe = name => console.log('Hello', name); | 
# 14. 简短的函数调用
我们可以使用三元操作符来实现多个函数调用。
|  |  | 
|  | function test1() { | 
|  |   console.log('test1'); | 
|  | }; | 
|  | function test2() { | 
|  |   console.log('test2'); | 
|  | }; | 
|  | var test3 = 1; | 
|  | if (test3 == 1) { | 
|  |   test1(); | 
|  | } else { | 
|  |   test2(); | 
|  | } | 
|  |  | 
|  | (test3 === 1? test1:test2)(); | 
# 15. switch 简化
我们可以将条件保存在键值对象中,并根据条件来调用它们。
|  |  | 
|  | switch (data) { | 
|  |   case 1: | 
|  |     test1(); | 
|  |   break; | 
|  |   case 2: | 
|  |     test2(); | 
|  |   break; | 
|  |   case 3: | 
|  |     test(); | 
|  |   break; | 
|  |    | 
|  | } | 
|  |  | 
|  | var data = { | 
|  |   1: test1, | 
|  |   2: test2, | 
|  |   3: test | 
|  | }; | 
|  | data[something] && data[something](); | 
# 16. 隐式返回
通过使用箭头函数,我们可以直接返回值,不需要 return 语句。
|  |  | 
|  | function calculate(diameter) { | 
|  |   return Math.PI * diameter | 
|  | } | 
|  |  | 
|  | calculate = diameter => Math.PI * diameter | 
# 17. 指数表示法
|  |  | 
|  | for (var i = 0; i < 10000; i++) { ... } | 
|  |  | 
|  | for (var i = 0; i < 1e4; i++) { | 
# 18. 默认参数值
|  |  | 
|  | function add(test1, test2) { | 
|  |   if (test1 === undefined) | 
|  |     test1 = 1; | 
|  |   if (test2 === undefined) | 
|  |     test2 = 2; | 
|  |   return test1 + test2; | 
|  | } | 
|  |  | 
|  | add = (test1 = 1, test2 = 2) => (test1 + test2); | 
|  | add()  | 
# 19. 延展操作符简化
|  |  | 
|  |  | 
|  | const data = [1, 2, 3]; | 
|  | const test = [4 ,5 , 6].concat(data); | 
|  |  | 
|  |  | 
|  | const data = [1, 2, 3]; | 
|  | const test = [4 ,5 , 6, ...data]; | 
|  | console.log(test);  | 
我们也可以使用延展操作符进行克隆。
|  |  | 
|  |  | 
|  | const test1 = [1, 2, 3]; | 
|  | const test2 = test1.slice() | 
|  |  | 
|  |  | 
|  | const test1 = [1, 2, 3]; | 
|  | const test2 = [...test1]; | 
# 20. 模板字面量
如果你厌倦了使用 + 将多个变量连接成一个字符串,那么这个简化技巧将让你不再头痛。
|  |  | 
|  | const welcome = 'Hi ' + test1 + ' ' + test2 + '.' | 
|  |  | 
|  | const welcome = `Hi ${test1} ${test2}`; | 
# 21. 跨行字符串
当我们在代码中处理跨行字符串时,可以这样做。
|  |  | 
|  | const data = 'abc abc abc abc abc abc\n\t' | 
|  |     + 'test test,test test test test\n\t' | 
|  |  | 
|  | const data = `abc abc abc abc abc abc | 
|  |          test test,test test test test` | 
# 22. 对象属性赋值
|  | let test1 = 'a';  | 
|  | let test2 = 'b'; | 
|  |  | 
|  | let obj = {test1: test1, test2: test2};  | 
|  |  | 
|  | let obj = {test1, test2}; | 
# 23. 将字符串转成数字
|  |  | 
|  | let test1 = parseInt('123');  | 
|  | let test2 = parseFloat('12.3');  | 
|  |  | 
|  | let test1 = +'123';  | 
|  | let test2 = +'12.3'; | 
# 24. 解构赋值
|  |  | 
|  | const test1 = this.data.test1; | 
|  | const test2 = this.data.test2; | 
|  | const test2 = this.data.test3; | 
|  |  | 
|  | const { test1, test2, test3 } = this.data; | 
# 25. 数组 find 简化
当我们有一个对象数组,并想根据对象属性找到特定对象,find 方法会非常有用。
|  | const data = [{ | 
|  |         type: 'test1', | 
|  |         name: 'abc' | 
|  |     }, | 
|  |     { | 
|  |         type: 'test2', | 
|  |         name: 'cde' | 
|  |     }, | 
|  |     { | 
|  |         type: 'test1', | 
|  |         name: 'fgh' | 
|  |     }, | 
|  | ] | 
|  | function findtest1(name) { | 
|  |     for (let i = 0; i < data.length; ++i) { | 
|  |         if (data[i].type === 'test1' && data[i].name === name) { | 
|  |             return data[i]; | 
|  |         } | 
|  |     } | 
|  | } | 
|  |  | 
|  | filteredData = data.find(data => data.type === 'test1' && data.name === 'fgh'); | 
|  | console.log(filteredData);  | 
# 26. 条件查找简化
如果我们要基于不同的类型调用不同的方法,可以使用多个 else if 语句或 switch,但有没有比这更好的简化技巧呢?
|  |  | 
|  | if (type === 'test1') { | 
|  |   test1(); | 
|  | } | 
|  | else if (type === 'test2') { | 
|  |   test2(); | 
|  | } | 
|  | else if (type === 'test3') { | 
|  |   test3(); | 
|  | } | 
|  | else if (type === 'test4') { | 
|  |   test4(); | 
|  | } else { | 
|  |   throw new Error('Invalid value ' + type); | 
|  | } | 
|  |  | 
|  | var types = { | 
|  |   test1: test1, | 
|  |   test2: test2, | 
|  |   test3: test3, | 
|  |   test4: test4 | 
|  | }; | 
|  | var func = types[type]; | 
|  | (!func) && throw new Error('Invalid value ' + type); func(); | 
# 27. indexOf 的按位操作简化
在查找数组的某个值时,我们可以使用 indexOf () 方法。但有一种更好的方法,让我们来看一下这个例子。
|  |  | 
|  | if(arr.indexOf(item) > -1) {  | 
|  | } | 
|  | if(arr.indexOf(item) === -1) {  | 
|  | } | 
|  |  | 
|  | if(~arr.indexOf(item)) {  | 
|  | } | 
|  | if(!~arr.indexOf(item)) {  | 
|  | } | 
按位 (~) 运算符将返回 true(-1 除外),反向操作只需要!~。另外,也可以使用 include () 函数。
|  | if (arr.includes(item)) {  | 
|  |  | 
|  | } | 
# 28. Object.entries()
这个方法可以将对象转换为对象数组。
|  | const data = { test1: 'abc', test2: 'cde', test3: 'efg' }; | 
|  | const arr = Object.entries(data); | 
|  | console.log(arr); | 
|  |  | 
|  | [ [ 'test1', 'abc' ], | 
|  |   [ 'test2', 'cde' ], | 
|  |   [ 'test3', 'efg' ] | 
|  | ] | 
|  | **/ | 
# 29. Object.values()
这也是 ES8 中引入的一个新特性,它的功能类似于 Object.entries (),只是没有键。
|  | const data = { test1: 'abc', test2: 'cde' }; | 
|  | const arr = Object.values(data); | 
|  | console.log(arr); | 
|  |  | 
|  | [ 'abc', 'cde'] | 
|  | **/ | 
# 30. 双重按位操作
|  |  | 
|  | Math.floor(1.9) === 1  | 
|  |  | 
|  | ~~1.9 === 1  | 
# 31. 重复字符串多次
为了重复操作相同的字符,我们可以使用 for 循环,但其实还有一种简便的方法。
|  |  | 
|  | let test = '';  | 
|  | for(let i = 0; i < 5; i ++) {  | 
|  |   test += 'test ';  | 
|  | }  | 
|  | console.log(str);  | 
|  |  | 
|  | 'test '.repeat(5); | 
# 32. 查找数组的最大值和最小值
|  | const arr = [1, 2, 3];  | 
|  | Math.max(…arr);  | 
|  | Math.min(…arr);  | 
# 33. 获取字符串的字符
|  | let str = 'abc'; | 
|  |  | 
|  | str.charAt(2);  | 
|  |  | 
|  | str[2];  | 
# 34. 指数幂简化