1. Array.prototype.includes() 用来判断一个数组是否包含一个指定的值,如果包含则返回 true,只能判断简单类型的数据,无法判断复杂类型的数据
Array.prototype.flat() 扁平化数组(其参数为数组层级,默认1),如果设置如果设置为 Number.Infinity 最终返回的都是一个一维数组。
Array.prototype.flatMap() ,是 Array.prototype.flat()与Array.prototype.map()的合体 。
Symbol.prototype.description Symbol ,类型数据增加了一个只读属性 description,其值同初始化 Symbol 时传入的值,增加这个属性主要是提供了一种更友好的判断 Symbol 值的方式
可选的Catch Binding ,也就是说 catch 可以省略参数的书写
2.幂运算符(**) 类似于Math.power(2,3):表示2的三次方
3.空值合并运算符(??) ,当左侧的操作数为 null 或者 undefined 时,返回其右侧操作数,否则返回左侧
4. 可选链操作符"?." , 允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效,
在引用为 null 或者 undefined 的情况下不会引起错误,该表达式短路返回值是 undefined。
与函数调用一起使用时,如果给定的函数不存在,则返回 undefined
可选链不可用于赋值。
ES8:
Object.values(),返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值。
Object.entries() 返回一个数组,返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历属性的键值对
Object.fromEntries() 返回一个对象,bject.entries()反向操作 ,它还可以快捷地把 Map 转换为 Object
Object.getOwnPropertyDescriptors() 用于获取一个对象的所有自身属性的描述符
String.prototype.padStart(targetLength [, padString]) 把指定字符串填充到字符串头部,返回新字符串。
String.prototype.padEnd(targetLength [, padString]) 把指定字符串填充到字符串尾部,返回新字符串。
String.prototype.trimStart() 移除字符串头部空格
String.prototype.trimEnd() 移除字符串尾部空格
String.prototype.replaceAll() ,返回一个新字符串,新字符串中所有满足 pattern 的部分都会被 replacement 替换
async/await 是比 Promise 更优雅的异步编程方案,添加了 async 的函数在执行后都会自动返回一个 Promise 对象。
async/await 需要在 catch 中才能捕捉到reject()注入的内容
for await of 类似Promise.all(),都是为了批量执行异步函数并返回结果
Promise.prototype.finally() 无论 Promise 对象最终是 fulfilled 还是 rejected 状态,都会触发finally()回调。
Promise.any() , 接收一个 Promise 数组,返回第一个 fulfilled 状态的 Promise 结果
不会因为某个 Promise 变成 rejected 状态而结束,必须等到所有参数 Promise 变成 rejected 状态才会结束
-->
<script>
console.log(Object.values({ name: "张三", age: "25" })); // 张三,25
console.log(Object.entries({ name: "李四", age: 58 })); //[name: "李四", age: 58 ]
console.log(Object.getOwnPropertyDescriptors({ name: "王五", age: 89 })); //输出 对象具体信息属性
({ name: "张三", age: 46 });
console.log(
Object.fromEntries([
["name", "张三"],
["age", "19"],
])
); //{ name: "张三", age: "25" }
// const map = new Map();
// map.set("name", "A");
// map.set("age", 18);
// console.log(map); // {'name' => 'A', 'age' => 18}
// const obj = Object.fromEntries(map);
// console.log(obj); // {name: 'A', age: 18}
// loadImg(
// "https://copyright.bdstatic.com/vcg/creative/cc9c744cf9f7c864889c563cbdeddce6.jpg@h_1280"
// ).finally(() => {
// console.log("end");
// });
// const arr = [1,2,3,[4,[7,8,[9]]]]
// console.log(arr.flat()); //[1,2,3,4[7,8],[9]]
// console.log(arr.flat(Infinity)); //[1,2,3,4,7,8,9]
// const arr = [1,2,3,4]
// console.log(arr.map((item,index)=>[index,item]))//[0,1],[1,2],[2,3],[3,4]
// console.log(arr.flatMap((item,index)=>[index,item])//[0, 1, 1, 2, 2, 3, 3, 4]
// );
// var str = ' zss '
// console.log(str);
// console.log(str.trimStart());
// console.log(str.trimEnd());
// const version = Symbol('1.0.0');
// console.log(version.toString() === 'Symbol(1.0.0)'); // true,ES10之前借助toString()做判断
// console.log(version.description === '1.0.0'); // true,现在用description作为判断依据更为友好
// console.log(0 ?? 1);//0 只有左侧值为null 或者underfined 才返回右侧值
// console.log(0 || 1);//1
//
// const data = {
// success :true
// }
// // data.getAge();//报错
// if(data.getAge){
// data.getAge()
// }
// 举例 ?.
// const res1 = data.getAge?.()
// const res2 = data.children?.[0]?.getAge?.()
// console.log(res1,res2);
var str = '我是天才,非常牛的天才'
console.log(str);
console.log(str.replace('天才','扭蛋'));
console.log(str.replaceAll('天才','笨蛋'));