ECMAScript常用语法

155 阅读2分钟

1.语法变化

1. const let
作用: 1.具有块级作用域 2.没有变量的提升 3.const定义的变量不能够重新复制,初始化的时候一定要给值
2. 解构复制
let 初始值 = arr|| obj

```js
//arr 
let [a,b,c]=[1,2,3]

//obj
let {name,age}={name:'fly',age:18}

//修改名称
let {name:name123,age}={name:'fly',age:18}
console.log(name123);  //fly
```

3. 默认参数

//设置属性的默认参数
 function show(a=1){
    console.log(a) //1
 }

2.字符串扩展

1. 字符串模板
<div>${el.name}</div>
2. includes

var str='fly'
var flag=str.indexOf('l') //返回下标 1
var flag=str.includes('l') //找到返回true 否则 false

3. startWith 和 endWith
startWith 查询是否以 xxx 开头
endWith 查询是否以 xxx 结尾
4, padStart(length,str)和padEnd(length,str)

//参数1 length 拼接够的字符串的总长度
//参数2 str  以 xx字符串拼接
let str='《哪吒》票房超《红海行动》,饺子收入过亿,跻身最赚钱导演';
str.slice(0,7).padEnd(10,'*'); //《哪吒》票房超...

3.函数

1. rest参数 和 ...扩展运算符

 //args 得到的是一个新的数组
 function (...args){} //在函数定义的时候使用得 ...obj 叫rest参数
 
 let arr=[1,2,3,4]
 show(...arr) //在函数调用的时候 使用 ...obj 叫做扩展运算符

2. 箭头函数

//标准写法
var show=(item)=>{return item}

//简化写法
//当只有一个参数的时候可以省略 ()
//当方法体只有一行的时候 可以 省略 {} return 
let show=item=>item 

4.for of 遍历数组和对象

let arr=[1,2,3,4]
for(let item of arr.entries()){
    console.log(item); //[0,1][1,2][2,3][3,4]
}
for(let item of arr.keys()){
    console.log(item);//0 1 2 3
}
for(let item of arr.values()){
    console.log(item);//1 2 3 4
}
//遍历数组的另一种写法 
for(let [index,item] of Object.entries(arr)){
    console.log(index,item)//0,1 1,2 2,3 3,4
}

let obj={
    name:'fly',
    age:18
}
for(let [key,value] of Object.entries(obj)){
    console.log(key,value)//name,fly age,18
}

5. set 和 map

//set 不能重复
let setList=new Set();
//添加 
setList.add(0)
//删除
setList.delete(0)
//清空
setList.clear()
//最短数组去重
[...new Set(arr)];

let map =new Map()
//添加
map.set('name','fly')
//删除
map.delete('name')
//清空
map.clear()

6.proxy 代理

let obj={
    name:'fly',age:'2018'
}
let proxy=new Proxy(obj,{
    //target 原来的对象 key 是获取键
    get(target,key){
        reutnr target[key].replace('2018','2019')
    },
    set(target,key,val){
        if(key==='name'){
            return target[key]=val
        }else{
            return target[key]
        }
    }
})
proxy.time  //2019

proxy.name='ssr'
console.log(proxy.name) //ssr

7.继承

    //1.es5
    //构造函数 + 原型 组合继承
    //父类
    function Person(name,age){
        //创建私有属性
        this.name=name;
        this.age=age;
    }
    Person.prototype={
        //强行改变自身的构造器属性
        constructor:Person,
        say(){
            console.log(this.name)
        },
        show(){
            console.log(this.age)
        }
    }
    //子类
    function ZS(name,age,job){
        //继承父类的私有属性
        Person.apply(this,arguments);
        this.job=job;
    }
    //继承父类的方法
    ZS.prototype=new Person();
    //创建自身的方法
    ZS.prototype={
        constructor:Person,
        hide(){
            console.log(this.job);
        }
    }
    
    //2. es6
    //父类
    class Person{
        constructor(name,age){
            this.name=name;
            this.age=age;
        },
        say(){
            console.log(this.name)
        }
    }
    //子类
    class ZS extends Person{
        constructor(name,age,job){
            super(...arguments);
            this.job=jon
        },
        show(){
            console.log(this.job)
        }
    }