Open xvno opened 4 years ago
按照一定的规则, 从对象或数组中取值为变量赋值:
// # Object
let obj = {name: 'vno', yob: '2000'};
let {name, yob, it} = obj; // name: 'vno, yob: '2000', it: undefined
// const { ipcMain, BrowserWindow } = require('electron');
const {log} = console;
// ## 模式解构
let {name: nickname, yob: birth} = obj; // nickname: 'vno', birth: '2020'
// # Array
let [a, b, c, d] = [1,2,3]; // a: 1, b: 2, c: 3, d: undefined
let [j, k] = false; // Thrown:...
let [e, f] = new Set(['a', 'b', 'c']); // e: 'a', f: 'b'
// # 字符串
let {length: len} = 'abcde'; // len:5
let [a, b, c] = 'abcde'; // a: 'a', b: 'b', c: 'c'
// # 函数参数
function add([x, y]) {
return x+y;
}
[[0,1], [1,2]].map([a,b] => a+b);
// # 综合
// ## 1
let comp = {
kw: [ 'vno', { name: 'Obama'}],
yob: 2020
}
let { kw: [keyword, {name: president}], yob: year} = comp; // keyword='vno', president='Obama', year=2020
// ## 2
let obj = {};
let arr = [];
({ foo: obj.prop, bar: arr[0] } = { foo: 123, bar: true }); //obj: {prop:123}, arr: [true]
// ## 3
[a, b] = [b, a]; // 用来写排序算法哦
// ## 4
for(let [kw, yob] of comp) {
...
}
undefined
function presidentSay(name='Donald M.F. Trump', words) {
let say = new Cowsay(name);
say(words);
}
let [a = 1, b = 0] = anArray;
let cap = `Hello, ${nickname}!`;
tag`Hello, ${nickname}`
y
/\d+(?=%)/.exec('100% of US presidents have been male') // ["100"]
/\d+(?!%)/.exec('that’s all 44 of them of 30% of the whole population') // ["44"]
/(?<=\$)\d+/.exec('Benjamin Franklin is on the $100 bill') // ["100"]
/(?<!\$)\d+/.exec('it’s is worth about €90/$110') // ["90"]
const RE_DATE = /(\d{4})-(\d{2})-(\d{2})/;
const matchObj = RE_DATE.exec('2020-03-27');
const year = matchObj[1]; // 2020
const month = matchObj[2]; // 03
const day = matchObj[3]; // 27
const RE_DATE = /(?<year>\d{4})-(?<month>\d{1,2})-(?<day>\d{2})/;
const matchObj = RE_DATE.exec('2020-3-27');
const year = matchObj.groups.year; // 2020
const month = matchObj.groups.month; // 03
const day = matchObj.groups.day; // 27
let re = /(?<year>\d{4})-(?<month>\d{1,2})-(?<day>\d{2})/u;
'2020-3-27'.replace(re, '$<day>/$<month>/$<year>')
true === (Math.abs(0.3 - 0.1 - 0.2) < Number.EPSILON)
123456789987654321n
对数方法
双曲函数
指数函数 **
, e**2
Math.trunc(1.5); // 1
Math.trunc(0.5); // 0
Math.trunc(-1.5); // -1
Math.trunc(-0.5); // -0
Math.trunc('1.5'); // 1
Math.trunc(true); // 1
Math.trunc(false); // 0
Math.trunc(null); // 0
Math.trunc(undefined); // NaN
Math.trunc(NaN); // NaN
Math.trunc('abc'); // NaN
function add(...args) {
for(let i of args) {
console.log(i);
}
}
Symbol.iterator
方法,就被视为具有 iterator 接口,就可以用 for...of
循环遍历它的成员。obj.prototype[Symbol.iterator] = function() {
return {
next () {
return {done: false, value}
}
}
}
class A{
constructor(name, dob){
this.name = name;
this.dob = dob;
}
}
A.prototype[Symbol.iterator] = function() {
const z = this;
const keys = Object.keys(z);
let i = 0;
let len = keys.length;
let key = null;
return {
next() {
if(i < len) {
key = keys[i++];
return {done: false, value: {key, value: z[key]} };
} else {
return {done: true, value: undefined};
}
}
}
}
let a = new A('xvno', 2020);
for(let i of a) {
console.log(i);
}
ES6 中默认部署了 Symbol.Iterator
的数据类型包括: MASS TAN
: Map, Array, Set, String, TypedArray, arguments, DOM Node List, Generator
Array, Set, Map 都有 entries(), keys(), values()
方法.
[Symbol.iterator](){}
方法(记为I), 即表明该对象是 iterable
, 而当前对象的I方法就是该对象的遍历器生成函数, 执行I函数返回当前对象的遍历器(Iterator).let obj = {
[Symbol.iterator]() {
let z = this;
let keys = Object.keys(z);
let idx = 0;
let len = keys.length;
return {
next () {
if(idx >= len) {
return { done: true};
} else {
let key = keys[idx++];
let val = z[key];
return {
value: {[key]: val}
}
}
}
}
}
}
obj.name = 'vno'
obj.yob = 2020;
let iter = obj[Symbol.iterator]();
console.log(iter.next());
console.log(iter.next());
console.log(iter.next());
id
: 数组的下标, 对象的key.forEach
关于 ES6
ECMAScript 2016, 2017
一般到达 stage-2 就一位置能通过
Babel 转码器
参照 这里
配置 .babelrc
presets
安装模块