1、let和const
在《JavaScript(9):var、let、const》中总结了var、let、const的用法与区别。
总结起来就那么几点:
⑴ let和const在同一作用域当中是不能重复声明的。
⑵ let、const属于块级作用域,一对{}就是一个块。
⑶ let声明的变量是可以改变的;const声明的变量则不行。如果将一个对象定义为const,那么这个对象就不能重新赋值(对象为引用类型),但是对象的属性和方法是可以改变的。
2、变量的解构
⑴ 数组的解构不成功,则变量的值就是 undefined。
⑵ 对象的解构,对象的解构赋值是先找到同名属性,然后再付给对应的变量。
⑶ 数组和对象解构时可以赋予初始默认值。
- //数组的解构
- let [x,y,k]=[5,'111',true];
- console.log(x);
- console.log(y);
- console.log(k);
- let [m=1,n=2]=[,99];
- console.log(m);
- console.log(n);
- //对象的解构
- const obj={
- name:'KKK',
- age:undefined,
- SayHello:function(){
- console.log(`我是${name},今年${age}岁。`);
- }
- };
- let {name='123',age=12,SayHello}=obj;
- console.log(name);
- console.log(age);
- SayHello();
-
-
- 输出结果:
- 5
- 111
- true
- 1
- 99
- KKK
- 12
- 我是KKK,今年12岁。
3、模版字符串
- console.log( `第一行的\n第二行的`);
- let str=`第一行的描述
- 第二行的描述。`
- console.log(str);
- let sname="poly";
- let iage=12;
- console.log(`名字是${sname+"COM"},今年${iage+11}岁。`);
-
- 输出结果:
- 第一行的
- 第二行的
- ES6_1.html:35 第一行的描述
- 第二行的描述。
- ES6_1.html:38 名字是polyCOM,今年23岁。
4、对象的简化写法
在描述对象的大括号里面,直接写变量和函数作为对象的属性和方法。
- const obj={
- name:'123',
- age:12,
- SayHello(){
- console.log(this);
- console.log(`我是${this.name},今年${this.age}岁。`)
- console.log(`我是${obj.name},今年${obj.age}岁。`)
- }
- }
-
- obj.name="Json";
- obj.age=9;
- obj.SayHello();
-
- 输出结果:
- {name: 'Json', age: 9, SayHello: ƒ}
- 我是Json,今年9岁。
- 我是Json,今年9岁。
5、rest参数
ECMAScript5的函数内部可以通过arguments来获取参数,arguments是对象而不是数组。
对于ECMAScript6而言:
⑴ 函数内部可以通过args来获取参数,args是数组。
⑵ ECMAScript6引入rest参数也是为了方便获取函数的参数,注意rest参数一定要放在参数列表的最后。
- console.log("---------ECMAScript5 函数传参与获取参数-------------------------");
- function func(){
- console.log(arguments);
- console.log("参数类型:" + typeof arguments);
- console.log(arguments instanceof Array);//不是数组类型
- for (var i = 0; i < arguments.length; i++) {
- console.log(arguments[i]);
- }
- console.log("参数类型:" + arguments.length);
-
- //转换为数组
- // let args = [];
- // for (let i = 0; i < arguments.length; i++) {
- // args.push(arguments[i]);
- // }
-
- //转换为数组
- args=Array.prototype.slice.apply(arguments);// args=Array.prototype.slice.call(arguments);
- console.log(args);
- }
-
- func(1,"abc");
-
- console.log("---------ECMAScript6 rest参数-------------------------");
- function es6func(...args){
- console.log(args);
- console.log("参数类型:" + typeof args);
- console.log(args instanceof Array);//是数组类型
- args.forEach( (item , index ) => {
- console.log( item, index )
- })
- }
-
- es6func("XML","JSON","TXT");
-
- let tools=["VSCode","HBuilder","Idea"];
- es6func(...tools);
-
- function add(a,b,...args){
- console.log(args);
- }
-
- add(1,2,3,4,5);
输出结果:

6、...扩展运算符
⑴ 通过...扩展运算符将伪数组的对象转换为数组。
- function func(){
- console.log(arguments instanceof Array);//不是是数组类型
- console.log(...arguments);
- let argsArr=[...arguments];//转换为数组
- console.log(argsArr);
- console.log(argsArr instanceof Array);//是数组类型
- }
-
- func(1,2,3,4);
-
- const selectP=document.querySelectorAll("p");
- const ArrP=[...selectP];//转换为数组
- console.log(ArrP);
- for (let i = 0; i < ArrP.length; i++) {
- console.log(ArrP[i].outerText);
- }
输出结果:

可以将字符串转换为数组。
- let str="123";
- console.log([...str]);
-
- 输出结果:
- (3) ['1', '2', '3']
⑵ 可以用于数组的合并。
- let arr1=[1,2,3];
- let arr2=['a','b2','c3'];
- let arr3=[...arr1,"JavaScript",...arr2];
- console.log(arr3);
-
- 输出结果:
- (7) [1, 2, 3, 'JavaScript', 'a', 'b2', 'c3']