2021年不可错过的17种JS优化技巧

Posted 飘哥233

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021年不可错过的17种JS优化技巧相关的知识,希望对你有一定的参考价值。

1.指数表示法

// Longhand
for (var i = 0; i < 10000; i++) { ... }
// Shorthand
for (var i = 0; i < 1e4; i++) {

2. 默认参数值

//Longhand
function add(test1, test2) {
  if (test1 === undefined)
    test1 = 1;
  if (test2 === undefined)
    test2 = 2;
  return test1 + test2;
}
//shorthand
add = (test1 = 1, test2 = 2) => (test1 + test2);
add() //output: 3

3.延展操作符简化

//longhand
// joining arrays using concat
const data = [1, 2, 3];
const test = [4 ,5 , 6].concat(data);
//shorthand
// joining arrays
const data = [1, 2, 3];
const test = [4 ,5 , 6, ...data];
console.log(test); // [ 4, 5, 6, 1, 2, 3]
我们也可以使用延展操作符进行克隆。

//longhand
// cloning arrays
const test1 = [1, 2, 3];
const test2 = test1.slice()
//shorthand
// cloning arrays
const test1 = [1, 2, 3];
const test2 = [...test1];

4.模板字面量

如果你厌倦了使用 + 将多个变量连接成一个字符串,那么这个简化技巧将让你不再头痛。

//longhand
const welcome = \'Hi \' + test1 + \' \' + test2 + \'.\'
//shorthand
const welcome = `Hi ${test1} ${test2}`;

5.跨行字符串

当我们在代码中处理跨行字符串时,可以这样做。

//longhand
const data = \'abc abc abc abc abc abc\\n\\t\'
    + \'test test,test test test test\\n\\t\'
//shorthand
const data = `abc abc abc abc abc abc
         test test,test test test test`

6.对象属性赋值

let test1 = \'a\'; 
let test2 = \'b\';
//Longhand 
let obj = {test1: test1, test2: test2}; 
//Shorthand 
let obj = {test1, test2};

7.将字符串转成数字

//Longhand 
let test1 = parseInt(\'123\'); 
let test2 = parseFloat(\'12.3\'); 
//Shorthand 
let test1 = +\'123\'; 
let test2 = +\'12.3\';

8.解构赋值

//longhand
const test1 = this.data.test1;
const test2 = this.data.test2;
const test2 = this.data.test3;
//shorthand
const { test1, test2, test3 } = this.data;

9.数组 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];
        }
    }
}
//Shorthand
filteredData = data.find(data => data.type === \'test1\' && data.name === \'fgh\');
console.log(filteredData); // { type: \'test1\', name: \'fgh\' }

10.条件查找简化

如果我们要基于不同的类型调用不同的方法,可以使用多个 else if 语句或 switch,但有没有比这更好的简化技巧呢?

// Longhand
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);
}
// Shorthand
var types = {
  test1: test1,
  test2: test2,
  test3: test3,
  test4: test4
};
var func = types[type];
(!func) && throw new Error(\'Invalid value \' + type); func();

10.indexOf 的按位操作简化

在查找数组的某个值时,我们可以使用 indexOf() 方法。但有一种更好的方法,让我们来看一下这个例子。

//longhand
if(arr.indexOf(item) > -1) { // item found 
}
if(arr.indexOf(item) === -1) { // item not found
}
//shorthand
if(~arr.indexOf(item)) { // item found
}
if(!~arr.indexOf(item)) { // item not found
}
按位 (~) 运算符将返回 true(-1 除外),反向操作只需要!~。另外,也可以使用 include() 函数。

if (arr.includes(item)) { 
// true if the item found
}

11.Object.entries()

这个方法可以将对象转换为对象数组。

const data = { test1: \'abc\', test2: \'cde\', test3: \'efg\' };
const arr = Object.entries(data);
console.log(arr);
/** Output:
[ [ \'test1\', \'abc\' ],
  [ \'test2\', \'cde\' ],
  [ \'test3\', \'efg\' ]
]
**/

12.Object.values()

这也是 ES8 中引入的一个新特性,它的功能类似于 Object.entries(),只是没有键。

const data = { test1: \'abc\', test2: \'cde\' };
const arr = Object.values(data);
console.log(arr);
/** Output:
[ \'abc\', \'cde\']
**/

13.双重按位操作

// Longhand
Math.floor(1.9) === 1 // true
// Shorthand
~~1.9 === 1 // true

14.重复字符串多次

为了重复操作相同的字符,我们可以使用 for 循环,但其实还有一种简便的方法。

//longhand 
let test = \'\'; 
for(let i = 0; i < 5; i ++) { 
  test += \'test \'; 
} 
console.log(str); // test test test test test 
//shorthand 
\'test \'.repeat(5);

15.查找数组的最大值和最小值

const arr = [1, 2, 3]; 
Math.max(…arr); // 3
Math.min(…arr); // 1

16.获取字符串的字符

let str = \'abc\';
//Longhand 
str.charAt(2); // c
//Shorthand 
str[2]; // c

17.指数幂简化

//longhand
Math.pow(2,3); // 8
//shorthand
2**3 // 8

最后

为了帮助大家更好温习重点知识、更高效的准备面试,特别整理了《前端工程师面试手册》电子稿文件。

内容包括html,css,javascript,ES6,计算机网络,浏览器,工程化,模块化,Node.js,框架,数据结构,性能优化,项目等等。(本文资料 适合0-2年)

包含了腾讯、字节跳动、小米、阿里、滴滴、美团、58、拼多多、360、新浪、搜狐等一线互联网公司面试被问到的题目,涵盖了初中级前端技术点。

前端面试题汇总

JavaScript

性能

linux

前端资料汇总

完整版PDF资料免费分享,只需你点赞支持,动动手指点击此处就可免费领取了

我一直觉得技术面试不是考试,考前背背题,发给你一张考卷,答完交卷等通知。

首先,技术面试是一个 认识自己 的过程,知道自己和外面世界的差距。

更重要的是,技术面试是一个双向了解的过程,要让对方发现你的闪光点,同时也要 试图去找到对方的闪光点,因为他以后可能就是你的同事或者领导,所以,面试官问你有什么问题的时候,不要说没有了,要去试图了解他的工作内容、了解这个团队的氛围。

找工作无非就是看三点:和什么人、做什么事、给多少钱,要给这三者在自己的心里划分一个比例。

最后,祝愿大家在这并不友好的环境下都能找到自己心仪的归宿

以上是关于2021年不可错过的17种JS优化技巧的主要内容,如果未能解决你的问题,请参考以下文章

2021年不可错过的17种JS优化技巧

布局性能优化:安卓开发者不可错过的性能优化技巧

2021 年需要了解的 34 个 JavaScript 优化技巧

17年,除了代码收入还有房子收入

实践总结 - 不可错过的Angular应用技巧

Python代码优化及技巧笔记