一、let和const
ES2015(ES6) 新增加了两个重要的 JavaScript 关键字: let 和 const。
let用法 | let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。 |
---|---|
不存在变量提升 | |
不允许重复声明 | |
for 循环计数器很适合用 let | |
暂时性死区 |
//for循环计数器
for (var i = 0; i < 10; i++) { //i为全局变量
setTimeout(function(){
console.log(i);
})
}
// 输出十个 10
//j每次循环都是一个新的变量
for (let j = 0; j < 10; j++) {
setTimeout(function(){
console.log(j);
})
}
// 输出 0123456789
//暂时性死区
var tmp = 123;
if (true) {
tmp = 'abc'; // ReferenceError
let tmp;
}
const用法 | 常量声明 |
---|---|
注意声明对象时,只能保证对象指针地址不变,对象自身的改变不会因此影响 | |
暂时性死区 |
二、解构赋值
1.数组的解构赋值,按照顺序解构,赋值给前面对应下标的变量。
let [a,b,c]=[1,2,3];//a为1 b为2 c为3
let [a, b = 1] = [3];//a为 b取默认值1
let [a, b = 1] = [3, 4]; //a为3 b为4 有自定义的值,以自定义值为准
let c;
let [a = 3] = [c]; //如果有默认值,同时有自定义值,但自定义为undefinded时,以默认值为准
2.对象解构赋值,按照属性名解构,与顺序无关。
let{a,b}={a:1,b:2};// 1 2
如果变量名与属性值不一致,下面这种写法会报错
let {
a: b
} = {
a: 1
};
//b ,1
//a报错,a is not defined
//这种写法是正确的
let {
a: a,
b: b
} = {
a: 1,
b: 2
}
//a 1,b 2
也就是说,对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。真正被赋值的是后者,而不是前者。
3.字符串解构赋值,字符串被转换成了一个类似数组的对象。
let [a,b,c,d,e]="abcde";
类似数组的对象都有一个length属性,因此还可以对这个属性解构赋值,如:
let {length : len} = 'hello';
// len 5
4.函数参数解构赋值
function add([x, y]){
return x + y;
}
add([1, 2]);
使用解构赋值让函数具有默认值
function foo(domobj, width = 100, height = 100) { //参数默认值,传实参用实参,不传实参用默认
domobj.style.display = "block";
domobj.style.width = width + "px";
domobj.style.height = height + "px";
}
var oDiv = document.querySelector("div");
foo(oDiv, 200, 200);
5.解构赋值的规则是,只要等号右边的值不是对象或数组,就先将其转为对象。由于undefined和null无法转为对象,所以对它们进行解构赋值,都会报错。
三、字符串扩展方法
字符的 Unicode 表示法 | “\u0061” |
---|---|
includes是否含有某字符,返回布尔值 | str.includes(“a”) |
startsWith()表示参数字符串是否在原字符串的头部 | str.startsWith(“a”) |
endsWith()表示参数字符串是否在原字符串的尾部 | str.endsWith(“a”) |
repeat()表示将原字符串重复几次,返回新的字符串 | str.repeat(3) |
padStart()从字符串头部添加字符,添加几位 | str.padStart(10, “0”) |
padEnd()从字符串尾部添加字符,添加几位 | str.padEnd(10, “0”) |
-----模板字符串
外部用反引号,反引号内如果需要使用变量${变量名}
let n=3;
console.log(`a${n}b`)
注意这里的字符串使用``将里面引住
四、数组扩展方法
扩展运算符… 将伪数组转换成真正的数组
let aDivs = document.getElementsByTagName("div");
aDivs = [...aDivs]; //将伪数组转换成真正的数组
aDivs = Array.from(aDivs); //将伪数组转换成真正的数组
console.log(Array.of(1, 2, 3)); //将参数序列变成数组
console.log(Array.isArray([1])); //判断参数是否是一个数组
五、set和map
1.set是一个不能有重复元素的集合,重复添加无效
//数组去重
var arr = [11, 1, 1, 2, 2, 1, 3];
let set = new Set(arr);
console.log(set);//11,1,2,3
//for of 是ES6新增遍历方式
//for of不能用来遍历对象,对象仍然使用for in遍历
for (let i of set) {
console.log(i); //i表示set里的值
}
2.set操作
add(value) | 添加元素 |
---|---|
delete(value) | 删除元素 |
has(value) | 判断是否是成员 |
clear() | 清除所有数据 |
3.Map的提出为了解决js中object(对象=>{key:value})中键(key)只能是字符串的限制,Map的键(key)可以是各种类型的值(包括对象)都可以当作键(key),包括es6提出的Set和Map都可以用来生成新的 Map。
let b=new Map();
b.set("name","xie");
b.set("age",18);
console.log(b);
//Map(2) {"name" => "xie", "age" => 18}
——属性和操作方法
(1)size 属性:size属性返回 Map 结构的成员总数
(2)set(key, value):set方法设置键名key对应的键值为value,然后返回整个 Map 结构。如果key已经有值,则键值会被更新,否则就新生成该键。(set方法返回的是当前的Map对象,因此可以采用链式写法。)
(3)get(key):get方法读取key对应的键值,如果找不到key,返回undefined。
(4)has(key):has方法返回一个布尔值,表示某个键是否在当前 Map 对象之中。
(5)delete(key):delete方法删除某个键,返回true。如果删除失败,返回false。
(6)clear():clear方法清除所有成员,没有返回值。
——遍历方法
keys():返回键名的遍历器。
values():返回键值的遍历器。
entries():返回所有成员的遍历器。
forEach():遍历 Map 的所有成员。
六、箭头函数
var fn=( )=>{ } | |
---|---|
1.参数() | 如果没有参数或有两个及以上参数,需要写括号,并将参数放入括号 |
如果只有一个参数,不需要加括号 | |
2.=> | 参数与函数体部分,意思是讲函数带入到函数中 |
3.函数语句块{ } | 如果函数语句块不加{ },并且只有一句话,就意味着使用return返回这句话 |
4. | 箭头函数都是匿名函数 |
5.this指向 | 使用箭头函数以后,this被重新指向当前箭头函数外this的指向 |
七、symbol
symbol 新增的一种基本数据类型 symbol类型值是唯一的。