ES6 新增了很多的语法规范,可以对写法和开发有很大的帮助
什么是ES6
ES6是ECMA Script 6.0的简称, 就是语言最新的标准, 发布与15年左右
目标让js语言成为能支持去编写大型复杂的应用语言, 成为企业级开发语言
ECMAScript 是定义标准的,JavaScript 是实现者
let声明变量
1.let声明的变量不会挂在window中,不会造成全局变量的污染
2.let能定义块级作用于的变量 有效区域: 定义开始,到定义块结束
3.let是不允许重复声明同一变量名
4.let不会有声明提前(只是人为看到的效果,实际上是有声明提前,提前临时性的死区中:Cannot access ‘num’ before initialization)
const声明常量
1.跟let完全相同 增加几个点
5.不允许被修改(不允许改变内存空间的地址)
6.const声明和赋值必须一次性完成,并且后期不允许改变存储空间的地址
能使用const就使用const,不能使用就用let。常量的效率比变量要高
字符串
字符串模板
在以前的字符串之上增加了一些功能
var day = "今天";
var str = "天气不错";
console.log(`${day}${str}可以出去玩`)
`${表达式}字符串`
可以添加串 可以使用转义字符 可以嵌套
console.log(`${true?`今天`:`明天`}\n出去`)
解构
结构化赋值
可以简化书写的长度,提升效率
let obj = {
name : "jack",
age : 18,
sex : "nan",
class : 10
}
let name,age;
({name,age} = obj);
console.log(name,age)
let {name , age} = obj
let {name : oName,age : oAge, sex:oSex} = obj;
… 运算符
收集 展开
运用在数组中,函数中 object是ES7新增的
起到参数收集作用
1. 收集符只能出现一次
2. 一个函数,剩余参数收集只能在最后一个形参
function sum(a,b,...args){
console.log(args)
}
console.log(sum(1,2,3,4,5,6))
起到参数展开作用
ES6针对数组 ES7针对对象
let arr = [1,2,3];
console.log(...arr);
let arr2 = [4,5,6];
let newArr = [...arr,...arr2];
console.log(newArr)·//123456
也可以是用在浅克隆
函数
参数默认值 可以传递表达式,不能传递语句
//container = getContainer()就是个表达式
function createElement(name = "div",container = getContainer(),content){
const ele = document.createElement(name);
if(content){
ele.innerHTML = content
}
container.appendChild(ele)
}
function getContainer(){
console.log('test');
return document.getElementById("container")
}
createElement(undefined,undefined,"sdfsdfsd")
createElement(undefined,undefined,"sdfsdfsd")
createElement(undefined,document.getElementById("container"),"sdfsdfsd")
// null在数学中,默认的为0,不要传递null
新增 new.target(可以判断构造函数是否使用new调用)
function Person(firstName,lastName){
if(new.target === undefined){
throw new Error("该函数必须使用new调用")
}
this.firstName = firstName;
this.lastName = lastName;
this.fullName = `${firstName} ${lastName}`
}
const p1 = new Person("张","三");
console.log(p1);
const p2 = Person("张","三");
console.log(p2)
箭头函数(ES6新增)
语法:箭头函数是一个函数表达式,理论上,任何使用函数表达式的地方都可以改成箭头函数
(参数1,参数2…) => {
函数体
}
应用场景
1.临时使用的函数,并不会刻意的去调用
1.异步的处理函数
2.事件的处理
2.继续去沿用外层的this
3.对象的属性不要去用箭头函数,除非是特别的需求
4.数组方法的时候,保证代码的简洁
箭头函数的简写
1.如果参数只有一个,可以省略小括号
参数 => {}
const print = num => {
console.log(num)
}
print(1000)
2.如果箭头函数只有一条返回语句(只有一个return 没有 console),可以省略花括号,也可以省略return
参数 => 返回值
const isOdd = num => num % 2 !== 0;
3 如果返回值是一个对象的时候,就会认为成函数体,把返回值变成表达式的形式
const obj = (a,b) => ({a : a,b : b})
注意点:
1.箭头函数中没有this,argument,new.target,如果要强行使用,则指向函数外层对应的this,argument,new.target
2.箭头函数没有原型,所有说占用空间非常小,不能当成构造函数来使用
对象
ES6新增
1.属性简写
function createUser(loginId,loginPwd,nickName){
return{
loginId,
loginPwd,
nickName,
}
}
const user = createUser("01","123","abc")
console.log(user)
2.方法简写
//在es6 之前对象中方法的写法是
fun = function(){
console.log(“Holle”)
}
//ES6可以写成下面这种
fun(){ //2方法速写, 不是箭头函数
console.log(“Holle”)
}
3.计算属性名
使用方式:
1.先声明一个变量或常量并赋值
2.在使用[]中写上声明的变量名.如下
const prop1 = "name";
const user = {
[prop1] : "老鼠",
console.log(this[prop1]);
console.log(use.name)
console.log(this[prop1] == use.name);//true
}
}
新增了API
1.is() 基本上和===一样,除了以下两种情况
在 ES6之前没有is()方法的时候NaN不等于NaN +0等于-0 而使用is()方法中的情况是:
Object.is(NaN,NaN) //true
Object.is(+0,-0)//false
2.assign() 用于混合对象,带浅克隆
将obj2的内容覆盖到obj1 会对obj1产生影响
const obj = Object.assign(obj1,obj2)
console.log(obj == obj1)//true
const obj = Object.assign({},obj1,obj2) //返回一个新的对象(这里的{}是创建的一个新的对象)
console.log(obj == obj1)//false
3…getOwnPropertyNames(obj)
枚举的顺序,返回一个数组,枚举出来对象的属性
对象的顺序其实是浏览器厂商自行规定
先排数字,升序
再排其他,按照书写顺序
4.setPrototypeOf() 设置某个对象的隐式原型 __ proto __
语法:Object.setPrototypeOf(obj, prototype)
参数:
obj :要设置其原型的对象。.
prototype :该对象的新原型(一个对象 或 null).