ES6总结

本文详细介绍了ES6中的解构赋值,包括默认值设置、对象属性赋值及数组元素交换。同时,讲解了模板字符串的使用,如includes(), startsWith(), endsWith()等方法。此外,讨论了箭头函数的特点和尾递归优化,以及Map和Set结构。最后,提到了数组和对象的操作,如扩展运算符、padStart/padEnd方法以及如何克隆对象。
摘要由CSDN通过智能技术生成

1.解构赋值
默认值生效的条件是,对象的属性值严格等于undefined。
var {x = 3} = {x: undefined};
x // 3

var {x = 3} = {x: null};
x // null

var { message: msg = ‘Something went wrong’ } = {};
msg // “Something went wrong” //改名、默认值

let arr=[5,7]
[arr[0],arr[]1] = [arr[1],arr[0]] //交换变量

任何部署了 Iterator 接口的对象,都可以用for…of循环遍历

2.模板字符串

如果在模板字符串中需要使用反引号,则前面要用反斜杠转义。
let greeting = \Yo` World!`;

includes():返回布尔值,表示是否找到了参数字符串。
startsWith():返回布尔值,表示参数字符串是否在原字符串的头部。
endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部

let s = ‘Hello world!’;
s.startsWith(‘Hello’) // true
s.endsWith(’!’) // true
s.includes(‘o’) // true

repeat方法返回一个新字符串,表示将原字符串重复n次。
‘x’.repeat(3) // “xxx”

padStart()用于头部补全,padEnd()用于尾部补全。
padStart()和padEnd()一共接受两个参数,第一个参数是字符串补全生效的最大长度,第二个参数是用来补全的字符串。
‘x’.padEnd(5, ‘ab’) // ‘xabab’
‘x’.padEnd(4, ‘ab’) // ‘xaba’

trim消除字符串空格,trimStart()消除字符串头部的空格,trimEnd()消除尾部的空格。它们返回的都是新字符串,不会修改原始字符串

replace()只能替换第一个匹配,replaceAll()方法,可以一次性替换所有匹配,返回一个新字符串,不会改变原字符串。
‘aabbcc’.replaceAll(‘b’, ‘_’)

at()方法接受一个整数作为参数,返回参数指定位置的字符,支持负索引(即倒数的位置)
const str = ‘hello’;
str.at(1) // “e”

Number.isFinite()用来检查一个数值是否为有限的(finite),即不是Infinity。
Number.isNaN()用来检查一个值是否为NaN。

parseInt()和parseFloat()

Number.isInteger()用来判断一个数值是否为整数。

Math.trunc方法用于去除一个数的小数部分,返回整数部分。
Math.sign方法用来判断一个数到底是正数、负数、还是零。对于非数值,会先将其转换为数值。

BigInt 只用来表示整数,没有位数的限制,任何位数的整数都可以精确表示,不能为小数

ES6 引入 rest 参数(形式为…变量名),用于获取函数的多余参数,这样就不需要使用arguments对象了。rest 参数搭配的变量是一个数组,该变量将多余的参数放入数组中。

function add(…values) {
let sum = 0;

for (var val of values) {
sum += val;
}

return sum;
}

add(2, 5, 3) // 10

箭头函数有几个使用注意点
(1)箭头函数没有自己的this对象。
(2)不可以当作构造函数,也就是说,不可以对箭头函数使用new命令,否则会抛出一个错误。
(3)不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。
(4)不可以使用yield命令,因此箭头函数不能用作 Generator 函数。

尾递归之所以需要优化,原因是调用栈太多,造成溢出,那么只要减少调用栈,就不会溢出。怎么做可以减少调用栈呢?就是采用“循环”换掉“递归”

function sum(x, y) {
if (y > 0) {
return sum(x + 1, y - 1);
} else {
return x;
}
}
sum(1, 100000)
蹦床函数的一个实现,它接受一个函数f作为参数。只要f执行后返回一个函数,就继续执行。注意,这里是返回一个函数,然后执行该函数,而不是函数里面调用函数,这样就避免了递归执行,从而就消除了调用栈过大的问题。
function sum(x, y) {
if (y > 0) {
return sum.bind(null, x + 1, y - 1);
} else {
return x;
}
}

Map 和 Set 结构,Generator 函数

let obj = {a:4,b:9,c:5}
let arr = […obj] //obj is not iterable
如果对没有 Iterator 接口的对象,使用扩展运算符,将会报错。
只要是部署了 Iterator 接口的数据结构,Array.from都能将其转为数组。

Array.from还可以接受第二个参数,作用类似于数组的map方法,用来对每个元素进行处理,将处理后的值放入返回的数组。
Array.from([1, 2, 3], (x) => x * x)

Array.of()方法用于将一组值,转换为数组。
Array.at(-1) 返回数组的最后一个元素

let aClone = { …a };
// 等同于
let aClone = Object.assign({}, a);

如果想完整克隆一个对象,还拷贝对象原型的属性,可以采用下面的写法。

// 写法二
const clone2 = Object.assign(
Object.create(Object.getPrototypeOf(obj)),
obj
);

// 写法三
const clone3 = Object.create(
Object.getPrototypeOf(obj),
Object.getOwnPropertyDescriptors(obj)
)

Object.getOwnPropertyDescriptors()方法返回一个对象,所有原对象的属性名都是该对象的属性名,对应的属性值就是该属性的描述对象
Object.setPrototypeOf()(写操作)、Object.getPrototypeOf()(读操作)、Object.create()(生成操作)
let obj={a:8}
let obj3 = {p:100}
Object.setPrototypeOf(obj,obj3)
obj.p //100
Object.getPrototypeOf(obj); //读取obj的原型 {p:100}

Object.keys(),Object.values(),Object.entries()
Object.fromEntries()方法是Object.entries()的逆操作,用于将一个键值对数组转为对象。
Null 判断运算符??只有运算符左侧的值为null或undefined时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值