let 和 const 命令
- let:块级作用域,只在let命令所在的代码块内有效。不存在变量提升。
- const:块级作用域,只在const命令所在的代码块内有效。不存在变量提升。用于常量的定义。
变量的解构赋值
按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构。
1.let [a, b, c] = [1, 2, 3];
a=1,b=2,c=3
2.let { foo, bar } = { foo: 'aaa', bar: 'bbb' };
foo= "aaa"
bar= "bbb"
字符串的扩展
1.模板字符串 (反引号 ``):使用模板字符串表示多行字符串,所有的空格和缩进都会被保留在输出之中。反引号里的变量使用${变量}引入。
Math 对象的扩展(只列了常用)
ES6 在 Math 对象上新增了 17 个与数学相关的方法。所有这些方法都是静态方法,只能在 Math 对象上调用。
1.Math.trunc()方法用于去除一个数的小数部分,返回整数部分。
Math.trunc(4.8) // 4
2.Math.sign()方法用来判断一个数到底是正数、负数、还是零。对于非数值,会先将其转换为数值。
它会返回五种值。
参数为正数,返回+1;
参数为负数,返回-1;
参数为 0,返回0;
参数为-0,返回-0;
其他值,返回NaN。
Math.sign(-5) // -1
Math.sign(5) // +1
Math.sign(0) // +0
Math.sign(-0) // -0
Math.sign(NaN) // NaN
函数的扩展
1.ES6 允许为函数的参数设置默认值,即直接写在参数定义的后面。
function log(x, y = 'World') {
console.log(x, y);
}
1.log('Hello')
// Hello World x: Hello y:World
2.log('Hello', 'China')
// Hello China x: Hello y:China
2.rest 参数
ES6 引入 rest 参数(形式为…变量名),用于获取函数的多余参数,这样就不需要使用arguments对象了。rest 参数搭配的变量是一个数组,该变量将多余的参数放入数组中。
function add(...values) {
let sum = 0;
for (var val of values) {
sum += val;
}
return sum;
}
add(2, 5, 3) // 10
3.箭头函数
ES6 允许使用“箭头”(=>)定义函数。如果箭头函数不需要参数或需要多个参数,就使用一个圆括号代表参数部分。
var f = () => 5;
// 等同于
var f = function () {
return 5
};
var sum = (num1, num2) => num1 + num2;
// 等同于
var sum = function(num1, num2) {
return num1 + num2;
};
数组的扩展
1.扩展运算符
扩展运算符(spread)是三个点(…)。
let a = [1]
let b = [2]
let c = [...a,...b] //c=[1,2]
2.Array.from() 方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括 ES6 新增的数据结构 Set 和 Map)。
let arrayLike = {
'0': 'a',
'1': 'b',
'2': 'c',
length: 3
};
// ES6 的写法
let arr2 = Array.from(arrayLike);
// ['a', 'b', 'c']
3.Array.of()方法用于将一组值,转换为数组。
Array.of(3, 11, 8) // [3,11,8]
4.实例方法:find(),findIndex(),findLast(),findLastIndex()
find()方法,用于找出第一个符合条件的数组成员。它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为true的成员,然后返回该成员。如果没有符合条件的成员,则返回undefined。
find()方法的回调函数可以接受三个参数,依次为当前的值、当前的位置和原数组。
let a = [1, 5, 10, 15]
a.find((value, index, arr)=> {
return value > 9;
}) // 10 (返回的是值)
findIndex()方法的用法与find()方法非常类似,返回第一个符合条件的数组成员的位置,如果所有成员都不符合条件,则返回-1。
[1, 5, 10, 15].findIndex(function(value, index, arr) {
return value > 9;
}) // 2 (返回的是值的位置)
findLast()和findLastIndex(),从数组的最后一个成员开始,依次向前检查,其他都保持不变。
5.fill()方法使用给定值,填充一个数组。
['a', 'b', 'c'].fill(7) // [7, 7, 7]
new Array(3).fill(7)
fill方法还可以接受第二个和第三个参数,用于指定填充的起始位置和结束位置(结束位置之前结束)
['a', 'b', 'c'].fill(7, 1, 2)
// ['a', 7, 'c']
6.entries(),keys()和values()——用于遍历数组。它们都返回一个遍历器对象(详见《Iterator》一章),可以用for…of循环进行遍历,唯一的区别是keys()是对键名的遍历、values()是对键值的遍历,entries()是对键值对的遍历。
let arrList = ['a', 'b']
for (let index of arrList.keys()) {
console.log(index);
}
// 0
// 1
for (let elem of arrList.values()) {
console.log(elem);
}
// 'a'
// 'b'
for (let [index, elem] of arrList.entries()) {
console.log(index, elem);
}
// 0 "a"
// 1 "b"
7.includes() 返回一个布尔值,表示某个数组是否包含给定的值
[1, 2, 3].includes(2) // true
[1, 2, 3].includes(4) // false
[1, 2, NaN].includes(NaN) // true
8.at(num) 输出数组指定索引的值,num如果为负值,表示索引从后往前数
const arr = [5, 12, 8, 130, 44];
arr.at(2) // 8
arr.at(-2) // 130
Symbol数据类型
ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值。它属于 JavaScript 语言的原生数据类型之一.可以从根本上解决对象属性太多导致属性名冲突覆盖的问题。对象中Symbol()属性不能被for…in遍历,但是也不是私有属性。
Set 和 Map 数据结构
1.Set是ES6引入的一种类似Array的新的数据结构,Set实例的成员类似于数组item成员,区别是Set实例的成员都是唯一,不重复的。这个特性可以轻松地实现数组去重。
2.Map是ES6引入的一种类似Object的新的数据结构,Map可以理解为是Object的超集,打破了以传统键值对形式定义对象,对象的key不再局限于字符串,也可以是Object。可以更加全面的描述对象的属性。