9月5日
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();
// 删除数组index1、index2位置上的数,并返回裁剪部分的新数组
_.pullAt(array, [index1, index2]);
9月6日
Promise对象
- Promise有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。而且状态一旦改变,就无法再次改变。
- Promise新建后会立即执行。
比如:
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 是在本轮事件循环的末尾执行,总是晚于本轮循环的同步任务。
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')
则是立即执行,因此最先输出。
字符串
- includes():返回布尔值,表示是否找到了参数字符串。
- startsWith():返回布尔值,表示参数字符串是否在原字符串的头部。
- endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部。
- repeat():返回一个新的字符串,表示将原字符串重复n次。如果参数是小数,则会被取整。
- padStart()、padEnd():字符串补全长度的功能。如果某个字符串不够长度,会在头部或尾部补全。
padStart()
用于头部补全,padEnd()
用于尾部补全。
includes()
、startsWith()
、endsWith()
都支持传入第二个参数,传入开始搜索的位置。padStart()
、padEnd()
JS数组去重黑魔法
使用数组新建一个Set
对象,然后把它转换成数组
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入门