天天看点

ES5-6

ES5
严格模式:'use strict'
1、定义变量必须加var或let  //let 定义变量必须赋值 var定义变量不赋值为undefined
2、禁止自定义的函数中的this指向window
3、创建eval作用域
4、对象不能有重名的属性
json对象:
JSON.stringify()将js对象(数组 对象)转为json字符串对象
JSON.parse()将json字符串对象转为js对象(数组 对象)
Object对象扩展:
var obj={
    name:'aa11'
}
var obj1=Object.create(obj,{
    age:{
        value:13,
        writable:true,//是否允许修改属性的值
        configurable:true//是否允许删除属性
    }
})
var obj2=Object.defineProperties(obj,{
    sex:{
        get:function(){
            return this.value
        },
        set:function(dd){
            this.value=dd
        }
    }
})
数组扩展:
var arr1=[1,2,3,4,5,6]

var arr2=arr1.map((item) => {
    return item+1
})

var arr3=arr2.filter((item) => {
    return item%2==0//返回值为true
})
arr3.forEach((item,index) => {
    console.log(item,index)
})
call apply bind区别
var obj={name:'howhy'}
function foo(data){console.log(this,data)}//结果window
foo.call(obj,3)//结果obj对象{name:'howhy'} 3
foo.apply(obj,[3])//结果obj对象{name:'howhy'} 3//传数组
var bind_foo=foo.bind(obj,23)
bind_foo() //结果obj对象{name:'howhy'} 23
setTimeout(function(){console.log(this}.bind(obj),1000) //结果obj对象{name:'howhy'}
ES6
1、let var const
let obj={name:"aaa",age:12}
let {name,age}=obj //name: aaa age :12
let [,,a,b]=[12,23,5,6] //a 5 b 6
function(obj){console.log(obj.name,obj,age)}相当于function({name,age}){console.log(name,age)}
let name='aaaa'
let ss=`my name is ${name}` // my name is aaaa
let username="howhy"
let age=12
let obj={
    username,
    age,
    getUsername(){
    return this.username;
  }
 }
 console.log(obj)//{username:"howhy",age:12} 
 
传统函数this是调用时决定的 哪个对象调用 this就是这个调用的对象 
箭头函数没有this不是调用时决定的 而是定义时所处的对象就是this(箭头函数的this看外层是否有函数,如果有,外层函数的this就是箭头函数的this 如果没有则this是window)

let fun=(...arg) => {
    console.log("fun "+arg)
}
let arr=[1,3,4,5]
let arr1=[0,...arr,6]
fun(arr)//fun 1 3 4 5 
console.log(arr1) //0 1 3 4 5 6

let promise=new Promise((resolve,reject)=>{ 
    setTimeout(() => {
        console.log(2222);//异步任务
        resolve('ok');//异步任务成功 'ok'
        reject()//异步任务失败
    },1000)
})
promise.then((data) => {//成功回调 data是ok
    console.log(data,'exec success')
},() => {//失败回调
    console.log('error')
})

iterator//array string map arguments map set


function MyIterator(arg){
    let index=0;
    return {
        next:function(){
            if(index<arg.length){
            return {value:arg[index++],done:true}
        }
        }
    }
}
let myiter=MyIterator(arr1)
console.log(myiter.next())
console.log(myiter.next())
console.log(myiter.next())
console.log(myiter.next())
console.log(myiter.next())


let arr1=[1,2,3,4]
for(let v of arr1){
    console.log(v)
}
let ss="aaaaaccc"
for(let s of ss){
    console.log(s)
}      

class Person{

constructor(name,age){

this.name=name,

this.age=age

}

getName(){

console.log(this.name)

}

}

let person=new Person("aaa",23)

person.getName()

class Man extends Person{

constructor(name,age){

super(name,age)

this.gender='man'

}

}

let man=new Man('aabb',23)

man.getName()

console.log(man)

Array.from(v)//将伪数组(arguments document.getElememtsByTagName('inpu'))转为可以forEach