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