[关闭]
@zChange 2017-09-13T14:37:18.000000Z 字数 2382 阅读 154

ES5 || ES6

javascript


ES5的新特性

Object

object.keys

  1. let arr = {
  2. a:1,
  3. b:2
  4. };
  5. log(Object.keys(arr));
  6. //(2) ["a", "b"]

Array

isArray

Array.isArray()
判断是否是数组

  1. Array.isArray([]);
  2. if(!Array.isArray){
  3. Array.isArray = function(arg){
  4. return Object.prototype.toString.call(arg) === '[object Array]';
  5. }
  6. }

indexOf

Array.indexOf()
返回数组中元素的第一个索引,不存在返回-1

  1. let a = [0,1,2];
  2. a.indexOf(0)//0
  3. a.indexOf(3)//-1

lastIndexOf

Array.lastIndexOf()
在数组最后一个开始查找,返回指定元素的第一个索引,不存在返回-1

  1. let a = [0,1,2];
  2. a.lastIndexOf(0)//2
  3. a.lastIndexOf(3)//-1

every

Array.every()
测试数组所有元素是否通过制定函数测试
当遇到一个条件不满足就返回false,不继续执行,否则执行到结束

  1. let arr = [5,2,3,4];
  2. function isPass(el,index,arr) {
  3. log(el,index,arr);
  4. return el > 0;
  5. }
  6. arr.every(isPass)
  7. //5 0 [5,2,3,4]
  8. //2 1 [5,2,3,4]
  9. //3 2 [5,2,3,4]
  10. //4 3 [5,2,3,4]
  11. //true
  12. function isPass(el,index,arr) {
  13. log(el,index,arr);
  14. return el > 5;
  15. }
  16. arr.every(isPass)
  17. //5
  18. //false

some

Array.some()
测试数组所有元素是否通过制定函数测试
当遇到一个为true的就直接返回,否则就返回false

  1. let arr = [1,2,3,4];
  2. function isPass(el,index,arr) {
  3. return el > 0;
  4. }
  5. arr.pass(isPass)
  6. //1
  7. //true
  8. function isPass(el,index,arr) {
  9. log(el,index,arr);
  10. return el > 5;
  11. }
  12. arr.pass(isPass)
  13. //1
  14. //2 3 4
  15. //false

map

Array.map()
会创建一个新数组,数组中每个元素会调用一次callback函数,每次执行的返回值组成一个新的数组

  1. let arr = [1,2,3,4];
  2. var nArr = arr.map((x,index,arr)=>{
  3. return x+1;
  4. });
  5. log(nArr);
  6. //[2,3,4,5]
  7. //反转
  8. var reverses = arr.map((x)=>{
  9. return x;
  10. }).reverse();
  11. //['4,3,2,1']
  12. //reverse().join('') 4321

filter

Array.filter()
方法会创建一个新数组,每个元素会调用callback函数,返回true的组成新数组

  1. let arr = [1,2,3,4];
  2. var filterArr = arr.filter((x)=>{
  3. return x > 1;
  4. });
  5. log(filterArr)
  6. //[2,3,4]

reduce

Array.reduce()
数组中每个元素执行callback函数,(从左至右)返回函数累计处理的结果值

  1. let arr = [1,2,3,4];
  2. //值累加
  3. var reduceArr = arr.reduce((a,value,index,arr)=>{
  4. log(a,value)
  5. return a+value
  6. },0)
  7. log(reduceArr);//7
  8. //合并数组
  9. var concatArr = [[0,1],[2,3],[4,5]].reduce((prev,curr)=>{
  10. return prev.concat(curr);
  11. },[])
  12. log(concatArr)
  13. //[0,1,2,3,4,5]
  14. //元素出现的次数
  15. let arr1 = [1,2,3,4,1,1,2];
  16. var countNum = arr1.reduce((prev,curr)=>{
  17. if(curr in prev){
  18. prev[curr] ++;
  19. }else{
  20. prev[curr] = 1;
  21. }
  22. return prev
  23. },{})
  24. log(countNum)//{1: 3, 2: 2, 3: 1, 4: 1}

reduceRight

Array.reduceRight()
数组中每个元素执行callback函数,(从右至左)返回函数累计处理的结果值

  1. //合并数组
  2. var concatArr = [[0,1],[2,3],[4,5]].reduce((prev,curr)=>{
  3. return prev.concat(curr);
  4. },[])
  5. log(concatArr)
  6. //[4, 5, 2, 3, 0, 1]

ES6的新特性

Object

Object.assign(目标对象, ...源对象)
将源对象赋值到目标对象。返回一个目标对象;

合并

  1. let obj1 = {q:0};
  2. let obj2 = {w:1};
  3. let obj3 = {e:2};
  4. var concat = Object.assign(obj1,obj2,obj3);
  5. log(concat);//{q: 0, w: 1, e: 2}
  6. log(obj1)//{q: 0, w: 1, e: 2} 目标对象也会改变
  7. log(obj2)//{w: 1}

深拷贝
只拷贝属性值,也就是拷贝的只是个对象的引用

  1. var copy = Object.assign({},obj);
  2. var copy1 = JSON.parse(JSON.stringify(obj));
  3. obj.a.c = 666;
  4. log(copy);//a:{c: 666}
  5. log(copy1)//a:{c: 1}
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注