2015年6月正式发布,JavaScript下一代语言标准,能够开发复杂大型的程序,成为企业级的语言。
1.ES6的作用域
- 全局作用域:定义在函数体和{ }外,在全局范围内生效
- 局部作用域:定义在函数体内部,包括函数的参数,仅在函数体内部有效
- 块级作用域:定义在{ }内部,仅在{ }中生效
2.变量声明
1.let
-
用于声明变量
-
不能重复声明,不能提升变量
-
块状作用域,只在{}内生效
-
使用let声明的变量不属于顶层对象
2.const -
声明常量
-
不能重复声明
-
必须进行初始化,即使只想要一个undefined的常量也要赋初值,
const a = undefined
-
常量不能修改
-
块状作用域,只在{}内生效
-
使用const声明的变量不属于顶层对象
-
- let,const声明的变量不属于顶层对象,所以下面的情况拿不到他们声明的变量
var a = 3;
let b = 4;
const c = 5;
console.log(this.a); //3
console.log(this.b); //undefined
console.log(this.c); //undefined
3.变量的解构赋值
可以给变量设置默认值,但默认值在该变量没被赋值情况下才生效,否则被覆盖
1.数组解构赋值
var [a,b,c] = [1,2,3];
console.log(a,b,c) //1,2,3
2.对象解构赋值
let{name:name,age:age}={name:"kk",age:"20"}
console.log(name,age) //kk 20
- 可以嵌套赋值
let obj={
p:['hello',{y:'world'}]
}
let{p:[x,{y:y}]}=obj;
console.log(x,y) // hello world
3.特殊对象的解构赋值
- 字符串做数组
let[a,b,c]='var';
console.log(a,b,c); //v a r
- 字符串做对象
let{length:len} = "function";
console.log(len); // 8
- Math的应用
let{PI:p}=Math;
console.log(p); //3.1415926
4.应用场景
- 交换变量
var m = 11;
var n = 22;
[m,n]=[n,m];
console.log(n); //11
console.log(m); //22
- 提取函数返回的多个值
function demo() {
return { name: 'abc', age: 11 };
}
var { name, age } = demo();
console.log(name, age);
- 定义函数参数
function demo1({ a, b, c }) {
console.log('姓名:' + a);
console.log('年龄:' + b);
console.log('性别:' + c);
}
demo1({ a: 'zs', b: 18, c: '男' });
- 设置函数参数的默认值
function fn({id,name="qq"}){
console.log(id,name) //4,"qq"
}
fn({id:4})
- 提取json中的数据
let jsonData={
id:1,
status:"okok",
data:[1,2,3,4]
}
let {id,status,data} = jsonData;
4.新增字符串操作
1.模板字符串
- 反引号定义字符串
- 通过${}取变量值
- 可以插入变量,函数
- 定义比较长的字符串
2.repeat()函数 - 字符串的复制,括号里是复制多少个
console.log("abc".repeat(10));
3.包含字符串 - 之前使用indexOf,正则
- includes()函数
- startsWith()
第二个参数表示开始搜索的位置 - endsWith()
4.String.raw - 对于转移字符不做处理
console.log( String.raw`test \n 第二行`); //test \n 第二行
- 注意使用的时候不加()
5.字符串补全长度
let str = "hello";
console.log(str.padStart(10)) // hello
console.log(str.padStart(10,"*")) //*****hello
console.log(str.padStart(10,"abc")) //abcabhello
5.数值
1.Number
- 是否非无穷:Number.isFinite()
- 转换成int类型:Number.parseInt()
- 是否整数:Number.isInteger()
- Math
- 去除小数部分:Math.trunc()
- 判断是否是正数:Math.sign()
6.for of
for(let val of xxx){
console.log(val)
}
- 用于遍历
数组,字符串,元素列表等(不能遍历对象,用for in) - 可通过break结束循环 forEach循环不能被结束
- for of遍历的对象需要实现一个迭代器的方法[iterator],这个迭代器的方法会返回一个对象,通过这个对象的.next()方法就能获取到对象每一个的值和状态,如果done参数是true就说明执行完了
- object对象默认是没有迭代器方法的,如果我们想让object对象可以通过for of遍历的话,可以自己去实现一个迭代器
obj[Symbol.iterator] = function () {
let index = 0;
return {
next: () => {
// 找value
let value = this[paramList[index]];
index++;
let done = index > paramList.length;
return {value, done}
}
}
};
for (let item of obj) {
console.log(item);
}