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入门


时间小鱼
127 声望5 粉丝

成长的路上充满坎坷,要么跨过去,要么等死!