ES6的干货知识复习(二)

323 阅读3分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

大家好,我是不孤独的孤独,今天整理的是ES6的的一些常见知识问答,方便大家在跳槽时候,拉出来看看这些问题。

ES6对数字类型有哪些优化?

举例一: ES5的isFinite(), isNaN()方法都会先将非数值类型的参数转化为Number类型再做判断,会造成isNaN('NaN') === true;ES6在Number原型上新增了isFinite(), isNaN()方法,用来取代传统的全局isFinite(), isNaN()方法检测数值是否有限、是否是NaN。

举例二: ES6在Math对象上新增了Math.cbrt(),trunc(),hypot()等等较多的科学计数法运算方法,可以更加全面的进行立方根、求和立方根等等科学计算。

ES6对Object类型有哪些优化?

举例一: 对象属性变量式声明:let [a,b] = ['1','2']let {c,d} = Object

举例二: 对象的解构赋值:let {c,d} = {c:'1',d:'2'}

举例三: 对象的扩展运算符(...),ES6对象的扩展运算符和数组扩展运算符用法本质上差别不大,数组也就是特殊的对象。对象的扩展运算符一个最常用在于可以轻松的取出一个目标对象内部全部或者部分的可遍历属性,从而进行对象的合并和分解。

举例四: super 关键字:ES6在Class类里新增了类似this的关键字super。同this总是指向当前函数所在的对象不同,super关键字总是指向当前函数所在对象的原型对象。

举例五: is()方法:用来完善'==='方法。'==='方法中NaN === NaN //false其实是不合理的,Object.is修复了这个小bug。(Object.is(NaN, NaN) // true)

举例六: ES6在Object原型上新增了assign()方法,用于对象新增属性或者多个对象合并。

const obj1 = { a1 };
const obj2 = { b2 };
const obj3 = { c3 };
Object.assign(obj1, obj2, obj3);
obj1 // {a:1, b:2, c:3}

需要注意的是,assign合并的对象obj1只能合并obj2、obj3中的自身属性,并不会合并obj2、obj3中的继承属性,也不会合并不可枚举的属性,且无法正确复制get和set属性(会直接执行get/set函数,取return的值)。

举例七: ES6在Object原型上新增了getOwnPropertyDescriptors()方法,此方法增强了ES5中getOwnPropertyDescriptor()方法,可以获取指定对象所有自身属性的描述对象。结合defineProperties()方法,可以完美复制对象,包括复制get和set属性。

举例八: ES6在Object原型上新增了getPrototypeOf()setPrototypeOf()方法,用来获取或设置当前对象的prototype对象。

举例九: ES6在Object原型上还新增了Object.keys(),Object.values(),Object.entries()方法,用来获取对象的所有键、所有值和所有键值对数组。

ES6对Function函数类型有哪些优化?

举例一: 箭头函数(已经很熟悉了,我就不详细说了)

举例二: 函数默认赋值,ES6之前,函数的形参是无法给默认值得,只能在函数内部通过变通方法实现。ES6以更简洁更明确的方式进行函数默认赋值。

举例三: ES6新增了双冒号运算符,用来取代以往的bind,call,和apply。但是浏览器暂不支持,Babel已经支持转码