X

曜彤.手记

随手写写,关于互联网技术、产品与创业

ES 8 新特性一览


已经脱离“前端组织”很久了,最近在看前端圈子的进展,发现 ES8 (ECMAScript2018) 已经于上个月发布了。快来看看有哪些新特性吧。2017 年前端迎来了很多东西,而从 Wasm 到 ES8,语言和技术开始走向融合,最终还是会迎来大团圆的结局。

1、Object.entries():

// 返回一个该对象对应的键值对数组,使其可以用 for-of 迭代;
var obj = { foo: "bar", baz: 42};
console.log(Object.entries(obj));

// 只会生成非原型链上的对象数组;
var obj = Object.create({}, {
  getFoo: {
    value: function() {
      return this.foo;
    }
  }
});
obj.foo = "bar";
console.log(Object.entries(obj));

// 非对象参数会被强行视为对象;
console.log(Object.entries("foo")); 

// 将 Object 转化为 Map 对象;
var obj = { foo: "bar", baz: 42 }; 
var map = new Map(Object.entries(obj));
console.log(map); 

一个对象通常都有自己的原型,所以一个对象总有一个 “prototype” 键。不过,从 ES5 开始可以使用 var map = Object.create(null) 来创建一个没有原型的对象。一个对象的键只能是字符串或者 Symbols,但一个 Map 的键可以是任意值。你可以通过 size 属性很容易地得到一个 Map 的键值对个数,而对象的键值对个数只能手动确认。

2、Object.values():

// 枚举一个对象的值列表;
var obj = { foo: "bar", baz: 42 };
console.log(Object.values(obj));

3、String.prototype.padStart() / String.prototype.padEnd():

// 从开头填充字符串(另一个从结尾);
'abc'.padStart(10);         // "       abc";
'abc'.padStart(10, "foo");  // "foofoofabc";
'abc'.padStart(6,"123465"); // "123abc";

4、Object.getOwnPropertyDescriptors():

// 可用于浅拷贝对象,作用同 Objecet.assign;
Object.create(
  Object.getPrototypeOf(obj), 
  Object.getOwnPropertyDescriptors(obj) 
);

5、SharedMemory 和 Atomics:

SharedArrayBuffer 用于开辟一块共享内存,该块共享内存可以在主线程和工作线程之间进行共享。可以通过 Atomics 对指定位置对共享内存进行操作。

var sab = new SharedArrayBuffer(1024);
worker.postMessage(sab);

但由于安全问题,最新版本的 Chrome 暂未实现该特性。



这是文章底线,下面是评论
  暂无评论,欢迎勾搭 :)