array.push(...newArray) // 往数组插入数组 // 交换a和b的值 // ES6写法 var a = 1, b = 2; [a, b] = [b, a]; console.log(a, b); // 2 1 // Babel转换成ES5后 var a = 1, b = 2; var _ref = [b, a]; a = _ref[0]; b = _ref[1]; console.log(a, b); // 2 1 // 获取某个元素相对于浏览器窗口的位置 var domRect = element.getBoundingClientRect(); // 删除数组index一、index2位置上的数,并返回裁剪部分的新数组 _.pullAt(array, [index1, index2]);
好比:es6
function timeout(ms) { return new Promise((resolve, reject) => { setTimeout(resolve, ms, 'done'); }); } timeout(100).then((value) => { console.log(value); });
上面代码中,timeout
方法返回一个Promise
实例,表示一段时间之后才会发生的结果。过了指定的时间(ms
参数)之后,Promise
实例的状态变为resolved
,就会触发then
方法绑定的回调函数。数组
let promise = new Promise(function(resolve, reject) { console.log('Promise'); resolve(); }); promise.then(function() { console.log('resolved.'); }); console.log('Hi!'); // Promise // Hi! // resolved
new Promise((resolve, reject) => { resolve(1); console.log(2); }).then(r => { console.log(r); }); // 2 // 1
上面代码中,调用resolve(1)
之后,后面的console.log(2)
仍是会执行,而且会首先打印出来。这是由于当即 resolved 的 Promise 是在本轮事件循环的末尾执行,老是晚于本轮循环的同步任务。promise
var promise = new Promise(function (resolve, reject) { resolve('ok'); setTimeout(function () { throw new Error('test') }, 0) }); promise.then(function (value) { console.log(value) }); // ok // Uncaught Error: test
Promise.resolve()
是在本轮“事件循环”的结束时
执行,而不是在下一轮“事件循环”的开始。浏览器
setTimeout(function () { console.log('three'); }, 0); Promise.resolve().then(function () { console.log('two'); }); console.log('one'); // one // two // three
上面代码中,setTimeout(fn, 0)
在下一轮“事件循环”开始时执行,Promise.resolve()
在本轮“事件循环”结束时执行,console.log('one')
则是当即执行,所以最早输出。dom
padStart()
用于头部补全,padEnd()
用于尾部补全。includes()
、startsWith()
、endsWith()
都支持传入第二个参数,传入开始搜索的位置。padStart()
、padEnd()
函数
使用数组新建一个Set
对象,而后把它转换成数组code
var array = [1, 2, 3, 4, 1, 2, 3, 4]; console.log([...new Set(array)]); // [1, 2, 3, 4] console.log(Array.from(new Set(array))); // [1, 2, 3, 4]
文章出处:阮一峰ES6入门对象