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
Array.of(v1,v2,v3)//将一系列数转为数组
find(function(value,index){return true})//返回第一个满足条件的元素
arr1.find((v,i) => { if(v>3){return true}})

浙公网安备 33010602011771号