https://juejin.cn/post/6844903734464495623
ES6面试
为什么选择 ES6 ?
- ES6是新一代的 JS 语言标准,规范了JS的使用标准(var标量提升)、新增了 JS 原生方法更加优雅
ES5、ES6、ES2015区别
- ES2015特指在2015年发布的新一代JS语言标准,ES6泛指下一代JS语言标准,包含ES2015、ES2016、ES2017、ES2018等。现阶段在绝大部分场景下,ES2015默认等同ES6。ES5泛指上一代语言标准。ES2015可以理解为ES5和ES6的时间分界线。
String字符串类型的升级优化
优化:
- 新增模板字符串,不需要再使用 + 拼接字符串,使用(
${}
)取代以往字符串形式,可以保存空格、换行符等
升级:
- 新增 includes 方法(以往只有indexOf、lastIndexOf查找字符位置)
- 新增 startWith()、endWith() padStart()、padEnd() repeat()
Array数组类型的升级优化
优化:
- 数组解构赋值
let [a,b,c] = [1,2,3]
形式进行赋值 - 扩展运算符 实现数组和松散序列的转化
let args = [...arguments]
,轻松实现数组结构复制
升级:
Number数字类型的升级优化
优化:
- 更加严谨安全
Number.isNaN
:更为严格安全,isNaN()
会将字符串先往Number类型转换,再判断Number.isFinite()
: Infinity、字符串、对象返回false
,全局isFinite()
同上Number.isInteger(1.0) // true
,判断是否是整数
Math
:Math.cbrt(8) === 2
,计算立方根Math.hypot(3:,4) === 25
,计算所有参数的平方的和的平方根Math.sign()
:正数返回1,负数返回-1,非数字返回NaNMath.trunc()
:先转换为Number类型,正数、负数取整 / 非数字返回NaN
Number数字类型的升级优化
优化:
- 更加严谨安全
Number.isNaN
:更为严格安全,isNaN()
会将字符串先往Number类型转换,再判断Number.isFinite()
: Infinity、字符串、对象返回false
,全局isFinite()
同上Number.isInteger(1.0) // true
,判断是否是整数
Math
:Math.cbrt(8) === 2
,计算立方根Math.hypot(3:,4) === 25
,计算所有参数的平方的和的平方根Math.sign()
:正数返回1,负数返回-1,非数字返回NaNMath.trunc()
:先转换为Number类型,正数、负数取整 / 非数字返回NaN
Object类型的升级优化
优化:
- 对象属性变量式声明:
// 属性名与对应value的变量名相同时可缩写
let [apple, orange] = ['red appe', 'yellow orange'];
let myFruits = {apple, orange};
// let myFruits = {apple: 'red appe', orange: 'yellow orange'};
对象解构赋值
对象的扩展运算符(...)
:let {...obj} = {'a' : 1 , 'b' : 2}
super
关键字:同this总是指向当前函数所在的对象不同- super总是指向
当前函数所在对象的原型对象
- super总是指向
升级,ES6在Object原型上新增的方法
Object.is
:做两个目标对象的相等比较,修复NaN === NaN //false
,Object.is(NaN,NaN) // true
Object.assign(onlyTarget , source1 ,...)
:合并覆盖到onlyTarget
中getownPropertyDescriptors(obj)
:获取对象所有的自身属性(配合defineProperties
使用),ES5中getownPropertyDescriptor(obj,属性名)
只能单个获取(配合defineProperty
使用)getPropertypeOf()
与setProperTypeOf()
:获取或设置当前对象的prototype对象keys() / values() / entries()
:分别获取对象键 / 值 / 键值对
的数组
Function函数类型
优化:
升级部分
foo::bar;
// 等同于
bar.bind(foo);
foo::bar(...arguments);
// 等同于
bar.apply(foo, arguments);
Symbol是什么
- ES6引入的第7种基本数据类型,
Symbol()生成的值都是独一无二的
let a = Symbol('a');
let obj = {} ;
obj[a] = 'xxx';
// obj = {a : 'xxx'} 的属性名不是Symbol('a'),而是默认使用字符'a' 作属性名
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。