原文链接: https://dsx2016.com/?p=692微信公众号: 大师兄2016
ECMAScript
ECMA Script
是ECMA-262
标准化的脚本语言的名称。
尽管JavaScript
和JScript
与ECMAScript
兼容,但包含超出ECMA Script
的功能。
以下表格按照四个模块分类:
-
ECMAScript 1st Edition (ECMA-262)
对应初版和ES5
之前的版本(仅本文) -
ECMAScript 5.1 (ECMA-262)
对应ES5
-
ECMAScript 2015 (6th Edition, ECMA-262)
对应ES6
-
ECMAScript Laster
对应ES7/ES8/ES9/ES10
等
篇幅所致,Array.prototype.map()
简写为map()
,以此类推.
ES 1st |
ES5 |
ES6 |
ES Laster |
---|---|---|---|
Array.length |
Array.isArray() |
Array.from() |
includes() |
unshift() |
indexOf() |
Array.of() |
|
concat() |
lastIndexOf() |
findIndex() |
|
join() |
every() |
find() |
|
pop() |
some() |
fill() |
|
push() |
forEach() |
copyWithin() |
|
reverse() |
map() |
entries() |
|
shift() |
filter() |
flat() |
|
slice() |
reduce() |
flatMap() |
|
sort() |
reduceRight() |
includes() |
|
splice() |
keys() |
||
toLocaleString() |
values() |
||
toString() |
删除数组的重复项
ES6
的使用,有两种方式,都需要先使用创建Set
数据结构来去除重复值
let fruits=[`banana`,`orange`,`apple`,`pear`,`grape`,`apple`];
第一种方式,使用Array.from()
let deduplicationFruits=Array.from(new Set(fruits))
第二种方式,使用...
扩展运算符(推荐)
let deduplicationFruits=[...new Set(fruits)]
判断数组中是否有给定的值
ES5
的使用Array.prototype.indexOf()
let arr=[1,2,NaN]
if (arr.indexOf(1) !== -1) {
// ...
}
// 注意
[NaN].indexOf(NaN) // -1
ES6
的使用Array.prototype.includes()
(推荐)
let arr=[1,2,NaN]
arr.includes(1) // true
[NaN].includes(NaN) // true
检测是否为数组
ES5
的使用Array.isArray()
(推荐)
,其他方法就不描述了
const arr = [];
const obj = {};
Array.isArray(arr);//true
Array.isArray(obj);//false
浅拷贝和深拷贝
浅拷贝
ES6
使用...
扩展运算符
注意: 此方法是浅拷贝
let arr1=[1,2,3,{a:123}];
let arr2=[...arr1]
arr2[0]=5 // arr1[1,2,3,{a:123}] arr2[5,2,3,{a:123}];
arr2[3].a=456 // arr1[1,2,3,{a:456}] arr2[5,2,3,{a:456}];
深拷贝
使用JSON
序列化,JSON.parse(JSON.stringify(arr))
这种方法比较简单,能够满足一般的场景.
此方法不兼容对象的复杂属性,如set,get,Function
等,只兼容JSON
格式支持的数据类型.
对于正则表达式类型、函数类型等无法进行深拷贝,并且会直接丢失对应的值
let arr1=[1,2,3,{a:123}]
let arr2=JSON.parse(JSON.stringify(arr1))
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。