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']