1.函数的length属性在ES5中,length表示形参??的个数(也就是你要传入的参数),比如functiondisplay(a,b,c){//};display.length等于to3.ES6中情况不同:(1)指定函数的默认参数后,函数的长度会返回参数个数而不指定默认参数funcitondisplay(str1='test',str2){console.log(str1+str2);}display.length;//1(2)rest(...变量名)rest参数不会被包含在length属性函数中display(str1,...strs){控制台日志(str1+str2);}display.length;//12.ES5中将类数组转换成真正数组的几种方法:Array.prototype.slice.call();Array.prototype.slice.call(arguments);//argemtns->ArrayES6:(1)Array.from()可以转换类数组对象和可遍历对象转换为真正的数组vararr=Array.from(arguments);(2)restparameterform:"...variablename"主要用于将arguments对象转化为数组,将arguments类数组对象转化为真实对象:funcitondisplay(...arr){//...arr而不是参数arrinstanceofArray//true}(3)扩展运算符:[...arrayLive](4)设置方法:newSet(arrayLive);3.使用函数的几点注意事项(重点理解)箭头函数没有自己的this,它们的this外层函数的this(1)函数体中的this对象是定义所在的对象,不是对象使用的地方(2)不能作为构造函数使用。即不能使用new命令,否则会报错(3)不能使用arguments对象,在函数体中不存在。如果要用,可以用rest参数代替(4)不能用yield命令,所以箭头函数做不到Generator函数的详细介绍可以参考:http://es6.ruanyifeng。com/#do...4.使用ES6给对象添加属性Object.assign:用于将源对象的所有可枚举属性复制到目标对象语法:Object.assign(targetObj,source1,source2,...)例子:vartarget={a:1,b:2};varsource1={c:3};varsource2={d:4};Object.assign(target,source1,source2);target//{a:1,b:2,c:3,d:4};这里有一些需要注意的地方:(1)只复制自由属性和可枚举的属性(2)这里的复制是浅拷贝(3)如果目标对象和原对象有同名的属性,或者多个原始对象有同名属性,后面的属性会覆盖前面的属性5.对象属性的遍历方法一览ES5中有3种忽略为false的可枚举属性的方法(1)for...in循环:遍历对象本身和继承的可枚举属性(2)Object.keys():返回对象本身的所有可枚举属性枚举属性的键名(3)json.stringify():只序列化对象的可枚举属性本身ES6增加了两个新操作,将忽略可枚举属性为false(1)Object.assign():只复制对象本身的可枚举属性(2)Reflect.enumerate():返回for将遍历的所有属性...in属性的遍历:ES6中有6种方法可以遍历对象(1)for...in循环:遍历对象本身和继承的可枚举属性(2)Object.keys():返回的键名对象自身的所有可枚举属性(3)getOwenPropertyNames():返回包含对象自身所有属性的数组(不包括Symbol属性,但包括不可枚举属性)(4)getOwenSymbolNames():返回包含所有对象自身属性的数组对象自身的Symbol属性(5)Reflect.ownKeys():返回一个包含所有对象自身属性的数组(包括Symbol和不可枚举属性)(6)Reflect.enumerate():返回for...in将要遍历的所有属性以上6种方法遵循的遍历顺序规则:(1)先遍历属性名为的属性numbers,按照数字顺序排序(2)其次遍历所有属性名为string的属性,按照字符串的生成时间排序(3)最后遍历所有属性名为symbolvalues的属性,并排序它们根据生成时间判断对象属性隶属关系:hasOwnPrototyOf():selfEnumerablein:selfandinheritance6._proto_property_proto_property用于读取或设置当前对象的原型对象这里是链接:https://github.com/creeperyan...7.Iterator8.Generator
