3.ES5 And ES6 总结

ES5新特性:

1.object
   所有对象操作中,如果o不是object类型,将会抛出TypeError异常
   Object.getPrototypeOf(o)(获取给对象的prototype对象)
   Object.getOwnPropertyDescriptor(o,p)获取对象描述
   Object.getOwnPropertyNames(o)获取自有属性名列表
   Object.create(o,p)以给丁对象o为prototype创建新对象并返回 
   Object.defineProperty(o,p,attrs)根据规则attars定义对象o上,属性名为p的属性
   Object.defineProperties(o,props)根据对象描述props来定义对象o,通常props包含多个属性定义
2.Array
   Array.isArray(a)判断a是否为真正的Array
   Array.prototype.indexOf(e,i)使用严格等来判断元素e在数组中的索引号。一个可选的搜索起点i
   Array.prototype.lastIndexOf(e,i)获取数组元素e在数组最后出现的位置
   Array.prototype.every(t,c)测试数组中的每个元素都满足测试t。
   Array.prototype.some(t,c)测试数组中是否有元素满足测试t
   Array.prototype.forEach(f,c)使用函数f遍历每个数组元素
   Array.prototype.map(f,c)使用函数f修改每个数组的每个元素,并返回数组
   Array.prototype.filter(f,c)收集通过测试f的数组元素
   Array.prototype.reduce(r,v)从左向右,使用函数r聚集数组的每个元素。
3.String
   String.prototype.trim去掉字符串两头的空白符和换行符
4.function
   Function.prototype.bind(thisTarget,arg1,...argn)
   为了指定当前函数的上下文对象和运行参数,该函数创建一个新的函数,保留给定的this对象和运行参数
5.JSON
   JSON.parse(text)
   JSON.stringify(obj)将指定的对象obj序列化为JSON文本
6.Date
   Date.now 
   Date.prototype.tolSOString
   根据ISO8601生成时间字符串

ES6特性:

迭代器和for-of循环:
#for-of循环
   1这是最简洁、直接的遍历数组元素语法
   2这个方法避开了for-in循环的所有缺陷
   3与forEach()不同的是,其可以正确的响应break、continue和return
   for-in循环用来遍历对象属性
   for-of循环用来遍历数据

   for(var value of myArray){
   console.log(value);
   }
#迭代器对象
   for-of循环首先调用集合的Symbol.iterator方法,紧接着返回一个新的迭代器的对象。迭代器对象可以是任意具有.next()方法的对象;for-of循环将重复调用这个方法,每次循环调用一次。
   var zeroesForeverIterator={
      [Symbol.iterator]:function(){
       return this;
        },
     next:function(){
    return{done:false,value:0};
      }
     };
#生成器(Generators)
   生成器就是迭代器
   通过实现Symbol.iterator和.next()两个方法就可以创建自定义迭代器
   生成器函数与普通函数的最大区别是,生成器函数可以自暂停

   function* quips(name){
      yield"hello" + name+"!";
      if(name.startsWith("X")){
       yield"你的名字"+name+"首字母是x很酷!";
      }
      }
#模板占位符
  var meeage=
  SaferHTML'<p>${bonk.sender}向你示好</p>';
  var message=
  SaferHTML(templateDate,bonk.sender);
#默认参数和不定参数
  不定参数
 (方法就可以接受任意数量的字符串参 不定参数)
  containsAll("banana","b","nan")返回true
  默认参数
  函数调用者不需要传递所有可能存在的参数,没有被传递的参数可由感知到的默认参数进行填充
#迭代器的解构
  var[var1,var2...]=array;
  var[head,....tail]=[1,2,3,4]
  数组解构赋值的模式同样适用于任意的迭代器
#箭头函数:(箭头函数的没有自己的this值,该值继承自外围作用域)
 //ES5
 var selected=allJobs.filter(function (job){
 return job.isSlected();
 });
//ES6
 var selected=allJobs.filter(job=>job.isSelected());
#Symbols(弱封装机制,当前作用域有效)
 symbol不能自动转换为字符串,这和语言中其他类型不同。尝试拼接字符串和symbol会得到
 TypeError错误。
 获取symbol的方法:
 1.调用symbol 2.调用Symbol.for(String)(共享型的) 3.使用标准定义的symbol
(Symbol.iterator)
 var mySymbol=Symbol();
 var isMoving=Symbol("isMoving");
 if(element[isMoving]){
 smoothAnimations(element);
 }
 element[isMoving]=true;
#集合(键值集合:Set Map WeakSet WeakMap)
 set是一群值的集合:1.(和数组的不同,set不会包含相同的元素)
 map一个Map对象是由若干键值对组成:
 (WeakSet的值和WeakMap的键必须是对象)
#代理Proxies
 代理Proxy(接收两个参数)目标对象(target)句柄对象(handler)
 代理句柄(句柄对象)
 句柄对象的方法可以覆写任意代理的内部方法
 var target={},handler={};
 var proxy=new Proxy(target,handler);
类class
 obj.prop=method的新方法 (computed)预计算属性
let和const
 let具有更好的作用域原则
 1.let声明的变量拥有块级作用域
 2.let声明仍然保留了提升的特性,但不会盲目提升。
 3.let声明的全局变量不是全局对象的属性
 4.形如for(let x..)的循环在每次迭代时都为X创建新的绑定(适用于for-of/for-in/c循环)
 5.let声明的变量直到控制流到达该变量定义的代码时才会被装载,所以在到达之前使用该变量
 会触发该函数。
 6.用let重定义变量会抛出一个语法错误(SyntaxError)
 const const声明的变量只可以在声明时赋值,不可以随便修改,否则会导致SyntaxError语法
 错误
#子类Subclassing
 javascript继承:
 解决静态属性Static
 super属性:
#模块Modules
 export{detectCats,kittydar};
 import{detectcats}from “kittydar.js”;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值