天天看點

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