如何正确地使用ES6提高我们的代码质量(二)

news/2024/11/28 5:50:04/

一、拓展运算符(…)

这个符号最大的作用就是展开,展开数组和对象。

①argument转数组

以下第一个例子就是编写一个将数组重新排序的方法,通过…我们可以轻而易举地分解数组。

// 例子 12-1// bad
function sortNumbers() {return Array.prototype.slice.call(arguments).sort();
}// good
const sortNumbers = (...numbers) => numbers.sort();

②调用参数

等同于削弱了apply的作用,减少一些不太便捷的方式,新增了一种更新更优的解决方案。

// 例子 12-2// bad
Math.max.apply(null, [14, 3, 77])// good
Math.max(...[14, 3, 77])
// 等同于
Math.max(14, 3, 77);

③3构建对象
通过这样的方式可以把一个已经存在的对象在声明新变量的时候展开,从而构建出一个全新的,符合我们需要的对象。

// 例子 12-3
let [a, b, ...arr] = [1, 2, 3, 4, 5];const { a, b, ...others } = { a: 1, b: 2, c: 3, d: 4, e: 5 };

二、双冒号运算符

// 例子 13-1
foo::bar;
// 等同于
bar.bind(foo);foo::bar(...arguments);
// 等同于
bar.apply(foo, arguments);

如果双冒号左边为空,右边是一个对象的方法,则等于将该方法绑定在该对象上面。

// 例子 13-2var method = obj::obj.foo;
// 等同于
var method = ::obj.foo;let log = ::console.log;
// 等同于
var log = console.log.bind(console);

三、解构赋值

①基础的解构

我前面的文章也有介绍到一些基础的结构方式。主要目的是把对象种的属性或者数组中元素取出来重新定义。

// bad
handleEvent = () => {this.setState({data: this.state.data.set("key", "value")})
};// good
handleEvent = () => {this.setState(({data}) => ({data: data.set("key", "value")}))
};

②对象深度解构

深度解构,跟前面的一个例子是一样的,这里与函数的默认参数结合,实现了更好的默认对象参数的声明方式。

// 例子 14-4// bad
function test(fruit) {if (fruit && fruit.name)  {console.log (fruit.name);} else {console.log('unknown');}
}// good
function test({name} = {}) {console.log (name || 'unknown');
}

多层解构,层层嵌套。

let obj = {a: {b: {c: 1}}
};const {a: {b: {c = ''} = ''} = ''} = obj;

③数组解构

优化代码,减少多次声明变量,提高代码的阅读性。

// 例子 14-6// bad
const spliteLocale = locale.splite("-");
const language = spliteLocale[0];
const country = spliteLocale[1];// good
const [language, country] = locale.splite('-');

④变量重命名

通过以下的方式可以让我们把已经存在的对象属性提取,并重新命名。

let { foo: baz } = { foo: 'aaa', bar: 'bbb' };
console.log(baz); // "aaa"

⑤增强的对象字面量

有时候我们要把某个变量的传到对象中,总是声明重复含义的变量名,这样对代码阅读性会产生一定的影响,用以下这种方式即可避免。

// bad
const something = 'y'
const x = {something: something
}// good
const something = 'y'
const x = {something
};

四、数组的扩展方法

①includes

判断数组中是否存在某个元素,比起foreach,forof等代码遍历的方式更加快速和简洁。

// bad
function test(fruit) {if (fruit == 'apple' || fruit == 'strawberry') {console.log('red');}
}// good
function test(fruit) {const redFruits = ['apple', 'strawberry', 'cherry', 'cranberries'];if (redFruits.includes(fruit)) {console.log('red');}
}

②find
这个API可以根据数组对象中参数的值为条件,提取符合条件的对象元素。

var inventory = [{name: 'apples', quantity: 2},{name: 'bananas', quantity: 0},{name: 'cherries', quantity: 5}
];function findCherries(fruit) {return fruit.name === 'cherries';
}console.log(inventory.find(findCherries)); // { name: 'cherries', quantity: 5 }

http://www.ppmy.cn/news/455454.html

相关文章

2019年中国全国5级行政区划(省、市、县(区)、镇(街道)、村)

国内码云的地址 https://gitee.com/ruina2019/china_area GitHub仓库地址 https://github.com/adyliu/china_area.git

Qt生成二维码

首先需要了解的是,二维码就是以01矩阵图的形式存储的字符串而已,就像我们扫描的网址类型的二维码,扫出来通过解析器其实就是一个url链接。关于其他的说明就自己百度了。 此处使用的是开源库qrencode来进行测试,类似的还有zxing或者…

全国行政区划数据(截止2019年3月)

省市区三级数据(含港澳台钓鱼岛以及经济开发区)和经纬度信息,准确有效! 下载地址请扫码

全国省(23个)、直辖市(4个)、自治区(5个)、特别行政区(2个)

省(23):广东省(粤)湖南省(湘)江西省(赣)河北省(冀)浙江省(浙)湖北省(鄂)云南省(云)山西省(晋&…

中国有多少个省?

中国共计34个省级行政区,包括23个省、5个自治区、4个直辖市、2个特别行政区。 23个省分别为:河北省、山西省、辽宁省、吉林省、黑龙江省、江苏省、浙江省、安徽省、福建省、江西省、山东省、河南省、湖北省、湖南省、广东省、海南省、四川省、贵州省、云…

天地图区域行政区划

我这边的写法是通过每个城市的orgID 如浙江省是330000,getEdgeMapInfo获取下面相对应的城市 然后通过接口返回的json数据 去请求json文件夹获取数据 drawLine(id) {let style {color: blue,weight: 3,opacity: 1,lineStyle: dashed, // 虚线fillColor: transprent…

34个省级行政区域,包括23个省,5个自治区,4个直辖市,2个特别行政区。

**我要干什么? 不要东摸摸西摸摸,最后啥也没干成。 静下心来搞科研。坐下来,静下心,钻进去。** 我国共有34个省级行政区域,包括23个省,5个自治区,4个直辖市,2个特别行政区。 23个省…

全国省市县三级行政区划excel文件

找遍全网,未见excel格式的。于是自己动手从民政部网站收集数据,整理成excel格式文件。送给需要的人。 网址:www.mca.gov.cn/article/sj/xzqh/2020/20201201.html 文件下载地址:https://download.csdn.net/download/aswkx/8558928…