wanderyt的博客

会踢足球的程序猿


  • 首页

  • 归档

  • 标签

  • 搜索

ES6 Learning - Promise对象

发表于 2016-04-07 | 分类于 UI Development

含义

Promise是异步编程的一种解决方案。语法角度来说可以从它来获取异步操作的消息。

Promise对象具有以下特点。

  1. 对象的状态不受外界影响。三种状态:Pending进行中,Resolved已完成和Rejected已失败。
  2. 一旦状态改变,就不会再变,任何时候都可以得到这个结果。

Promise对象的缺点:

  1. 无法取消Promise,一旦建立就会立即执行,无法中断。
  2. 不设置回调函数会导致Promise内部抛出的错误不会反映到外部。
  3. 当处于Pending状态时,无法判断当前进展到哪个阶段(开始还是即将完成)。
阅读全文 »

ES6 Learning - Generator函数

发表于 2016-04-06 | 分类于 UI Development

简介

Generator函数是ES6提供的一种异步编程解决方案。执行Generator函数会返回一个遍历器对象,依次遍历Generator函数内部的每一个状态。

function关键字与函数名之间有一个星号。

函数体内部使用yield语句,定义不同的内部状态

1
2
3
4
5
6
7
function* helloWorldGenerator() {
yield 'hello';
yield 'world';
return 'ending';
}

var hw = helloWorldGenerator();
阅读全文 »

ES6 Learning - Iterator and for...of

发表于 2016-04-05 | 分类于 UI Development

Iterator

Iterator的作用有三个:一是为各种数据结构,提供一个统一的、简便的访问接口;二是使得数据结构的成员能够按某种次序排列;三是ES6创造了一种新的遍历命令for...of循环,Iterator接口主要供for...of消费。

每一次调用next方法,都会返回数据结构的当前成员的信息。具体来说,就是返回一个包含value和done两个属性的对象。其中,value属性是当前成员的值,done属性是一个布尔值,表示遍历是否结束。

1
2
3
4
5
6
7
var map = new Map([["name", "张三"], ["title", "Author"]]);
it.next()
// Object {value: "name", done: false}
it.next()
// Object {value: "title", done: false}
it.next()
// Object {value: undefined, done: true}
阅读全文 »

ES6 Learning - Set & Map

发表于 2016-04-05 | 分类于 UI Development

Set

基本语法

类似于数组,有两种构造方式。

1
2
3
4
5
6
7
8
9
10
11
var s = new Set();
[1,2,3,4,5,5].map(x => s.add(x));
for (let i of s) {
console.log(i);
}

var s = new Set([1,2,3,3,4]);
s.size; // 4
[...s]; // [1,2,3,4]
[1,2,3,4,3].foreach(n => s.add(n));
s.size; // 4
阅读全文 »

ES6 Learning - Proxy & Reflect

发表于 2016-03-31 | 分类于 UI Development

Proxy

proxy可以理解成对对象的某些操作进行一次拦截。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var obj = new Proxy({}, {
get: function (target, key, receiver) {
console.log(`getting ${key}!`);
return Reflect.get(target, key, receiver);
},
set: function (target, key, value, receiver) {
console.log(`setting ${key}!`);
return Reflect.set(target, key, value, receiver);
}
});

obj.count = 1
// setting count!
++obj.count
// getting count!
// setting count!
// 2
阅读全文 »

ES6 Learning - Symbol

发表于 2016-03-31 | 分类于 UI Development

基本语法

ES6新增一种数据类型:

Undefined
Null
Boolean
String
Number
Object
Symbol

Symbol主要负责解决同名属性的区分。比如一个对象使用了另一个对象,而两个对象都有一个相同名称的属性,这时就引入Symbol加以区分。

1
2
3
4
let s = Symbol();

typeof s
// "symbol"

生成的Symbol是一个原始类型的值。可以把它当做是一个类似字符串的数据类型。

阅读全文 »

ES6 Learning - 对象扩展

发表于 2016-03-30 | 分类于 UI Development

属性的简洁表示法

ES6允许直接写入变量和函数。这时属性值等于属性名代表的变量。

1
2
3
4
5
6
7
8
9
10
11
var birth = '2000/01/01';

var Person = {
name: '张三',

//等同于birth: birth
birth,

// 等同于hello: function ()...
hello() { console.log('我的名字是', this.name); }
};
阅读全文 »

ES6 Learning - 函数扩展

发表于 2016-03-28 | 分类于 UI Development

参数默认值

基本用法

之前比较常见的写法是:

1
2
3
4
function(x, y) {
y = y || "some string";
...
}

但是这样的话,如果y是一个布尔值类型的false,这是y的值就被重写成了"some string"。

ES6中更简洁的写法是:

1
2
3
4
5
6
7
function Point(x = 0, y = 0) {
this.x = x;
this.y = y;
}

var p = new Point();
p // { x: 0, y: 0 }
阅读全文 »

ES6 Learning - 数组扩展

发表于 2016-03-28 | 分类于 UI Development

Array.from()

将两类对象转为数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括ES6新增的数据结构Set和Map)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
let arrayLike = {
'0': 'a',
'1': 'b',
'2': 'c',
length: 3
};

// ES5的写法
var arr1 = [].slice.call(arrayLike); // ['a', 'b', 'c']

// ES6的写法
let arr2 = Array.from(arrayLike); // ['a', 'b', 'c']

Array.from('hello')
// ['h', 'e', 'l', 'l', 'o']

此处slice的这种用法我还没见过,但是测试确实可以。

阅读全文 »

ES6 Learning - 数值扩展

发表于 2016-03-25 | 分类于 UI Development

二进制与八进制表示

二进制:前缀0b(或0B)
八进制:前缀0o(或0O)

Number.isFinite(), Number.isNaN()

Number.isFinite()用来检查数值是否是非无穷。

1
2
3
4
5
Number.isFinite(15); // true
Number.isFinite(NaN); // false
Number.isFinite(Infinity); // false
Number.isFinite(-Infinity); // false
Number.isFinite('foo'); // false

Number.isNaN()用来检查一个值是否为NaN。

1
2
isNaN("abc"); // true
Number.isNaN("abc"); // false

由此可以看出,传统的比较方法中,是将值先调用Number()转为数值,再进行判断,因此isNaN("abc")会得到true。而这两个新方法只对数值有效,非数值一律返回false。这样判断更加准确。

阅读全文 »
12345
wanderyt

wanderyt

wanderyt Blog

50 日志
12 分类
27 标签
RSS
github weibo twitter
© 2015 - 2019 wanderyt
由 Hexo 强力驱动
主题 - NexT.Muse