这是看完ES6文档后的学习笔记
1、let与const
let
的用法类似于var
,但是所声明的遍历,只在let
命令所在的代码块内有效。
{
let a = 10;
var b = 1;
}
a // ReferenceError: a is not defined.
b // 1
const
声明一个只读的变量
。一旦声明,常量的值就不能改变。
const PI = 3.1415;
PI // 3.1415
PI = 3;
// TypeError: Assignment to constant variable.
2、解构赋值
ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构
(Destructuring)。
let [foo, [[bar], baz]] = [1, [[2], 3]];
foo // 1
bar // 2
baz // 3
let [ , , third] = ["foo", "bar", "baz"];
third // "baz"
let [x, , y] = [1, 2, 3];
x // 1
y // 3
let [head, ...tail] = [1, 2, 3, 4];
head // 1
tail // [2, 3, 4]
let [x, y, ...z] = ['a'];
x // "a"
y // undefined
z // []
//也就是说以后可以直接这样取值
let obj = {name:'张三',age:12,remark:'好好学习'}
let {name} = obj
name // '张三'
3、数组的扩展
扩展运算符
(spread)是三个点( … )。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列。
console.log(...[1, 2, 3])
// 1 2 3
console.log(1, ...[2, 3, 4], 5)
// 1 2 3 4 5
[...document.querySelectorAll('div')]
// [<div>, <div>, <div>]
function push(array, ...items) {
array.push(...items);
}
function add(x, y) {
return x + y;
}
const numbers = [4, 38];
add(...numbers) // 42
合并数组:
const arr1 = ['a', 'b'];
const arr2 = ['c'];
const arr3 = ['d', 'e'];
// ES6 的合并数组
[...arr1, ...arr2, ...arr3]
// [ 'a', 'b', 'c', 'd', 'e' ]
对象转数组:
let obj = {name:'张三',age:12,remark:'好好学习'}
// ES6的写法
let arr3 = Array.of(obj);// [{name:'张三',age:12,remark:'好好学习'}]
判断数组中是否存在某个值
[1, 4, -5, 10].find((n) => n < 0)
// -5
[1, 5, 10, 15].findIndex(function(value, index, arr) {
return value > 9;
}) // 2(下标)
动态替换数组中某一数值 :
//动态替换数组中某一数值————fill 方法还可以接受第二个和第三个参数,用于指定填充的起始位置和结束位置。
['a', 'b', 'c'].fill(7, 1, 2)
// ['a', 7, 'c']
let arr4 = [{name:'张三',age:12},{name:'李四',age:13},{name:'王五',age:14}]
arr4.fill({name:'王二麻子',age:20},1,2)
//[{name:'张三',age:12},{name:'王二麻子',age:20},{name:'王五',age:14}]
多维数组拉平(合并):
Array.prototype.flat()
用于将嵌套的数组“拉平”
,变成一维的数组。该方法返回一个新数组,对原数据没有影响。
[1, 2, [3, 4]].flat()
// [1, 2, 3, 4]
let arr5 = [{name:'张三',age:12},{name:'李四',age:13},{name:'王五',age:14},[{name:'王二麻子',age:10}]]
//不管有多少层嵌套,都要转成一维数组,可以用 Infinity 关键字作为参数。
let arr8 = arr5.flat(Infinity)
//[{name:'张三',age:12},{name:'李四',age:13},{name:'王五',age:14},{name:'王二麻子',age:10}]
数组排序稳定性:
排序稳定性
(stable sorting)是排序算法的重要属性,指的是排序关键字相同的项目,排序前后的顺序不变。
const arr = [
'peach',
'straw',
'apple',
'spork'
];
const stableSorting = (s1, s2) => {
if (s1[0] < s2[0]) return -1;
return 1;
};
arr.sort(stableSorting)
// ["apple", "peach", "straw", "spork"]