ES6 随笔【奇形怪状】

887 阅读4分钟

往期复习

ES6 随笔【赋值解构】
记录小编认为ES6中不常见,但以后很有用的
宝藏新特效


指数操作符 - **

** 指数运算符与 + - * % 属于同一性质的运算操作符 与函数Math.pow(..)等效

// 指数操作符
console.log(2**8);    // 256

Object.getOwnPropertyDescriptors( )

获取对象的所有自身属性的描述符方法
所指定对象的所有自身属性的描述符,如果没有任何自身属性,则返回空对象。

const obj = {
	name: '大大',
	age: ()=> { return '18' }
};
const result = Object.getOwnPropertyDescriptors(obj)
console.log(result)
// {
//   name: { value: '大大', writable: true, enumerable: true, configurable: true },
//   age: {
//     value: [Function: age],
//     writable: true,
//     enumerable: true,
//     configurable: true
//   }
// }

用法

浅拷贝一个对象

Object.assign() 方法只能拷贝源对象的可枚举的自身属性,而且访问器属性会被转换成数据属性
利用getOwnPropertyDescriptors()函数,同时拷贝时,拷贝属性的特性们,也拷贝源对象的原型

const obj = {
	name: '大大',
	age: ()=> { return '18' }
};

const obj2 = Object.create(
	Object.getPrototypeOf(obj),
	Object.getOwnPropertyDescriptors(obj)
);
console.log(obj2)
// { name: '大大', age: [Function: age] }

创建子类

创建子类的典型方法是定义子类,将其原型设置为超类的实例,然后在该实例上定义属性
这么写很不优雅,特别是对于 getters 和 setter 而言。
可以使用Object.create()结合Object.getOwnPropertyDescriptors()来创建子类

function superclass() {}    // 父类
superclass.prototype = {
	// 在这里定义方法和属性
};
function subclass() {}    // 子类
subclass.prototype = Object.create(superclass.prototype, Object.getOwnPropertyDescriptors({
	// 在这里定义方法和属性
}));

flat( )

flat()方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。

语法

var newArray = arr.flat([depth])    // 等效于 reduce + concat

用法

扁平化嵌套数组

var arr1 = [1, 2, [3, 4]];
arr1.flat();    // [1, 2, 3, 4]

var arr2 = [1, 2, [3, 4, [5, 6]]];
arr2.flat();    // [1, 2, 3, 4, [5, 6]]

var arr3 = [1, 2, [3, 4, [5, 6]]];
arr3.flat(2);   // [1, 2, 3, 4, 5, 6]

// 使用 Infinity(无限大),可展开任意深度的嵌套数组
// 等效于 reduce + concat + isArray + recursivity
var arr4 = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]];
arr4.flat(Infinity);   // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

扁平化与数组空项

// 等效于 forEach + isArray + push + recursivity
var arr4 = [1, 2, , 4, 5];
arr4.flat();    // [1, 2, 4, 5]

flatMap( )

flatMap() 方法首先使用映射函数映射每个元素,然后将结果压缩成一个新数组。

语法

var new_array = arr1.flatMap(function callback(currentValue[, index[, array]]) {
	// return element for new_array
}[, thisArg])

参数

callback

可以生成一个新数组中的元素的函数,可以传入三个参数:

  • currentValue

当前正在数组中处理的元素

  • index可选

可选的。数组中正在处理的当前元素的索引。

  • array可选

可选的。被调用的 map 数组

thisArg

可选的。执行 callback 函数时 使用的this 值。

返回值

一个新的数组,其中每个元素都是回调函数的结果,并且结构深度 depth 值为1。

map 和 flatMap 的比较

let arr1 = ["it's Sunny in", "", "California"];

arr1.map(x => x.split(" "));
// [["it's","Sunny","in"],[""],["California"]]

arr1.flatMap(x => x.split(" "));
// ["it's","Sunny","in", "", "California"]

trimStart( )

trimStart() 方法从字符串的开头删除空格。
trimLeft() 是此方法的别名。

const greeting = '   Hello world!   ';

console.log(greeting);    // "   Hello world!   "

console.log(greeting.trimStart());    // "Hello world!   ";

trimEnd( )

trimEnd() 方法从一个字符串的末端移除空白字符。
trimRight() 是这个方法的别名。

const greeting = '   Hello world!   ';

console.log(greeting);    // "   Hello world!   ";

console.log(greeting.trimEnd());    // "   Hello world!";

trim( )

trim() 方法会从一个字符串的两端删除空白字符。
在这个上下文中的空白字符是所有的空白字符
(space, tab, no-break space 等)
以及所有行终止符字符(如 LF,CR等)。

const greeting = '   Hello world!   ';

console.log(greeting);    // "   Hello world!   ";

console.log(greeting.trim());   // "Hello world!";

Object.fromEntries( )

Object.fromEntries() 方法把键值对列表转换为一个对象。

Map 转化为 Object

通过 Object.fromEntries, 可以将 Map 转换为 Object:

const map = new Map([ ['name', '大大'], ['age', 20] ]);
const obj = Object.fromEntries(map);
console.log(obj); // { name: '大大', age: 20 }

Array 转化为 Object

通过 Object.fromEntries, 可以将 Array 转换为 Object:

const arr = [ ['0', '大大'], ['1', '20'], ['2', '前端'] ];
const obj2= Object.fromEntries(arr);
console.log(obj2); // { '0': '大大', '1': '20', '2': '前端' }

对象转换

Object.fromEntries 是与 Object.entries() 相反的方法 用数组处理函数 -> 可以像下面这样转换对象:

const object1 = { a: 1, b: 2, c: 3 };

const object2 = Object.fromEntries(
  Object.entries(object1)
  .map(([ key, val ]) => [ key, val * 2 ])
);

console.log(object2);
// { a: 2, b: 4, c: 6 }

catch

原先

try {} catch(e) {}

如今

try {} catch {}

基本数据类型发展

ES6及之前(5种)

String、Number、Boolean、Null、Undefined

ES6之后ES10之前(6种)

String、Number、Boolean、Null、Undefined、Symbol

ES10之后(7种)

String、Number、Boolean、Null、Undefined、Symbol、BigInt


结尾

ES6 随笔【赋值解构】
ES6 随笔【奇形怪状】
参考 上沅兮 大佬的文章 - ES6、ES7、ES8、ES9、ES10新特性一览
查询 MDN 官网资料

最后想说

  • 记录下自己复习的点点滴滴
  • 要是本文章(笔记)有任何需要修改或注意的地方,麻烦联系我噢!小编卑微整改

博客原文✨