mirror of
https://github.com/ruanyf/es6tutorial.git
synced 2025-05-24 10:22:23 +00:00
docs(object): edit Object.value()
This commit is contained in:
parent
e9fbf72aac
commit
7f0b3fe2f0
@ -624,9 +624,11 @@ class B {
|
|||||||
|
|
||||||
// B的实例继承A的实例
|
// B的实例继承A的实例
|
||||||
Object.setPrototypeOf(B.prototype, A.prototype);
|
Object.setPrototypeOf(B.prototype, A.prototype);
|
||||||
|
const b = new B();
|
||||||
|
|
||||||
// B继承A的静态属性
|
// B的实例继承A的静态属性
|
||||||
Object.setPrototypeOf(B, A);
|
Object.setPrototypeOf(B, A);
|
||||||
|
const b = new B();
|
||||||
```
|
```
|
||||||
|
|
||||||
《对象的扩展》一章给出过`Object.setPrototypeOf`方法的实现。
|
《对象的扩展》一章给出过`Object.setPrototypeOf`方法的实现。
|
||||||
|
@ -754,19 +754,19 @@ Object.getPrototypeOf(rec) === Rectangle.prototype
|
|||||||
// false
|
// false
|
||||||
```
|
```
|
||||||
|
|
||||||
## Object.values(),Object.entries()
|
## Object.keys(),Object.values(),Object.entries()
|
||||||
|
|
||||||
### Object.keys()
|
### Object.keys()
|
||||||
|
|
||||||
ES5引入了`Object.keys`方法,返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键名。
|
ES5 引入了`Object.keys`方法,返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键名。
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
var obj = { foo: "bar", baz: 42 };
|
var obj = { foo: 'bar', baz: 42 };
|
||||||
Object.keys(obj)
|
Object.keys(obj)
|
||||||
// ["foo", "baz"]
|
// ["foo", "baz"]
|
||||||
```
|
```
|
||||||
|
|
||||||
目前,ES7有一个[提案](https://github.com/tc39/proposal-object-values-entries),引入了跟`Object.keys`配套的`Object.values`和`Object.entries`。
|
ES2017 [引入](https://github.com/tc39/proposal-object-values-entries)了跟`Object.keys`配套的`Object.values`和`Object.entries`,作为遍历一个对象的补充手段。
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
let {keys, values, entries} = Object;
|
let {keys, values, entries} = Object;
|
||||||
@ -790,7 +790,7 @@ for (let [key, value] of entries(obj)) {
|
|||||||
`Object.values`方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值。
|
`Object.values`方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值。
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
var obj = { foo: "bar", baz: 42 };
|
var obj = { foo: 'bar', baz: 42 };
|
||||||
Object.values(obj)
|
Object.values(obj)
|
||||||
// ["bar", 42]
|
// ["bar", 42]
|
||||||
```
|
```
|
||||||
@ -812,9 +812,9 @@ var obj = Object.create({}, {p: {value: 42}});
|
|||||||
Object.values(obj) // []
|
Object.values(obj) // []
|
||||||
```
|
```
|
||||||
|
|
||||||
上面代码中,`Object.create`方法的第二个参数添加的对象属性(属性`p`),如果不显式声明,默认是不可遍历的。`Object.values`不会返回这个属性。
|
上面代码中,`Object.create`方法的第二个参数添加的对象属性(属性`p`),如果不显式声明,默认是不可遍历的,因为`p`是继承的属性,而不是对象自身的属性。`Object.values`不会返回这个属性。
|
||||||
|
|
||||||
`Object.values`会过滤属性名为Symbol值的属性。
|
`Object.values`会过滤属性名为 Symbol 值的属性。
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
Object.values({ [Symbol()]: 123, foo: 'abc' });
|
Object.values({ [Symbol()]: 123, foo: 'abc' });
|
||||||
|
@ -355,7 +355,7 @@ someAsyncThing().then(function() {
|
|||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
var promise = new Promise(function(resolve, reject) {
|
var promise = new Promise(function(resolve, reject) {
|
||||||
resolve("ok");
|
resolve('ok');
|
||||||
setTimeout(function() { throw new Error('test') }, 0)
|
setTimeout(function() { throw new Error('test') }, 0)
|
||||||
});
|
});
|
||||||
promise.then(function(value) { console.log(value) });
|
promise.then(function(value) { console.log(value) });
|
||||||
@ -363,9 +363,9 @@ promise.then(function(value) { console.log(value) });
|
|||||||
// Uncaught Error: test
|
// Uncaught Error: test
|
||||||
```
|
```
|
||||||
|
|
||||||
上面代码中,Promise指定在下一轮“事件循环”再抛出错误,结果由于没有指定使用`try...catch`语句,就冒泡到最外层,成了未捕获的错误。因为此时,Promise的函数体已经运行结束了,所以这个错误是在Promise函数体外抛出的。
|
上面代码中,Promise 指定在下一轮“事件循环”再抛出错误,结果由于没有指定使用`try...catch`语句,就冒泡到最外层,成了未捕获的错误。因为此时,Promise的函数体已经运行结束了,所以这个错误是在Promise函数体外抛出的。
|
||||||
|
|
||||||
Node.js有一个`unhandledRejection`事件,专门监听未捕获的`reject`错误。
|
Node 有一个`unhandledRejection`事件,专门监听未捕获的`reject`错误。
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
process.on('unhandledRejection', function (err, p) {
|
process.on('unhandledRejection', function (err, p) {
|
||||||
@ -375,7 +375,7 @@ process.on('unhandledRejection', function (err, p) {
|
|||||||
|
|
||||||
上面代码中,`unhandledRejection`事件的监听函数有两个参数,第一个是错误对象,第二个是报错的Promise实例,它可以用来了解发生错误的环境信息。。
|
上面代码中,`unhandledRejection`事件的监听函数有两个参数,第一个是错误对象,第二个是报错的Promise实例,它可以用来了解发生错误的环境信息。。
|
||||||
|
|
||||||
需要注意的是,`catch`方法返回的还是一个Promise对象,因此后面还可以接着调用`then`方法。
|
需要注意的是,`catch`方法返回的还是一个 Promise 对象,因此后面还可以接着调用`then`方法。
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
var someAsyncThing = function() {
|
var someAsyncThing = function() {
|
||||||
@ -776,7 +776,7 @@ run(g);
|
|||||||
Promise.resolve().then(f)
|
Promise.resolve().then(f)
|
||||||
```
|
```
|
||||||
|
|
||||||
上面的写法有一个缺点,就是如果`f`是同步函数,那么它会在下一轮事件循环执行。
|
上面的写法有一个缺点,就是如果`f`是同步函数,那么它会在本轮事件循环的末尾执行。
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
const f = () => console.log('now');
|
const f = () => console.log('now');
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
- [ECMAScript Daily](https://ecmascript-daily.github.io/): TC39委员会的动态
|
- [ECMAScript Daily](https://ecmascript-daily.github.io/): TC39委员会的动态
|
||||||
- [The TC39 Process](https://tc39.github.io/process-document/): 提案进入正式规格的流程
|
- [The TC39 Process](https://tc39.github.io/process-document/): 提案进入正式规格的流程
|
||||||
- [TC39: A Process Sketch, Stages 0 and 1](https://thefeedbackloop.xyz/tc39-a-process-sketch-stages-0-and-1/): Stage 0 和 Stage 1 的含义
|
- [TC39: A Process Sketch, Stages 0 and 1](https://thefeedbackloop.xyz/tc39-a-process-sketch-stages-0-and-1/): Stage 0 和 Stage 1 的含义
|
||||||
|
- [TC39 Process Sketch, Stage 2](https://thefeedbackloop.xyz/tc39-process-sketch-stage-2/): Stage 2 的含义
|
||||||
|
|
||||||
## 综合介绍
|
## 综合介绍
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user