温故知新丨ES6

159 阅读3分钟

纸上得来终觉浅,绝知此事要躬行。

函数扩展

  • 默认参数
  • rest 参数
  • 返回该函数的函数名: name属性

箭头函数

  • this 就是定义时所在的对象,而不是使用时所在的对象,固定不变

  • 不可以使用new

  • 不能用 arguments,如果用可以用...rest参数代替

  • 定义对象不能用

  • 需要动态 this 也不能用

尾调用

  • 某个函数的最后一步就是调用另一个函数
  • 尾调用不用出现在函数尾部,只要是最后一步操作即可
  • 优点:只保存内层函数的调用帧,不再用到外层函数的内部变量,节省内存,尾调优化

尾递归

  • 函数调用自身是递归,如果函数尾调用自身,就称为尾递归!
  • 不会发生·栈溢出·错误

数组扩展

Array.from

  • 将类似数组的对象或者可遍历的对象转换成真正的数组
  • Array.from 函数提供一个 map 方法,对每个元素处理并放入返回的数组。

Array.of

  • 没有参数,就返回空数组
  • 一个参数时,参数是指定数组的长度
  • 多个参数,将一组值转化为数组
Array.of(1,2,3,4,5)
//结果:[1,2,3,4,5]
  • 模拟实现
function ArrayOf() {
    return [].slice.call(arguments);
}

includes

  • 判断函数中是否存在某一项[1,2,3,4,5].includes(7) //false

find

  • 找出数组中符合条件的第一个元素,符合则返回值,反之返回undefind
let arr = [1,2,3,4,5,6];
   arr.find((value) => return value > 2 )	//结果:value=3

findIndex

  • 返回符合条件的第一个数组的下标
let arr = [7,8,9,10];
     arr.findIndex((value)=> return value > 8 )		//结果:2
倘若所有元素都不符合匿名函数的条件,findIndex()函数就会返回-1

fill

  • 用指定的值,填充到数组,一般用于默认值
let arr = [1,2,3];
    arr.fill(4);	//结果:[4,4,4]		全部覆盖
	
	//填充部分
    let arr = [1,2,3];
    arr.fill(4,1,3);	//结果:[1,4,4]		后两个参数指定范围

entries

  • 对数组的下标和值进行遍历,返回一个遍历器,可以用for..of对其进行遍历
for(let [i,v] of ['a', 'b'].entries())
    {
        console.log(i,v);
    }
    //0 "a"
    //1 "b"

keys

  • 函数作用:对数组的下标进行遍历,返回一个迭代器
for(let index of ['a', 'b'].keys())
    {
        console.log(index);
    }
    //0
    //1

对象扩展

Object.is

  • 函数的作用:比较两个值是否严格相等,或者说全等
  • 与全等的细微区别如下:
console.log(Object.is(+0,-0))		//false
console.log(+0 === -0)				//turn
console.log(Object.is(NaN,NaN))		//turn
console.log(NaN === NaN)			//false

Object.assign

  • 函数作用:将源对象的属性赋值到目标对象上
   let target = {"a":1};			//这个充当目标对象
   let origin = {"b":2,"c":3};		//这个充当源对象
   Object.assign(target,origin);
   console.log(target);	//结果 {a: 1, b: 2, c: 3}

const obj = Object.assign({a:1},{b:2},{c:3})
console.log(obj)	//属性都被合并到obj上

Object.keys

  • 返回自身所有可枚举属性的keys组成的数组(属性名)

Object.values

  • 返回自身所有可枚举属性的values组成的数组(属性值)

Object.entries

  • 返回每队key,value组成数组的数组

proto

  • 用来读或者设置当前对象的 prototype对象

Object.getPrototypeOf

  • 函数作用:获取一个对象的prototype属性,也可以修改原型,同__proto__相同

Object.fromEntries

  • Object.entries() 的逆操作,将一个键值对数组转化为对象