[译]V8发布4.9版本

简介:

原文:V8 Release 4.9

作为发布流程的一部分,大约每隔6周,我们就会创建一个新的V8分支。每个版本都是在Chrome浏览器项目创建beta milestone分支前一刻从V8的master分支创建的。今天,我们很高兴宣布我们最新的分支4.9将处于beta阶段,直到它随Chrome 49稳定版本发布。V8 4.9版本带来一些对开发者的利好,所以我们想带你预览下几周后发布的这个版本的一些亮点。

常青浏览器项目一般每6周发布一次新版本,如Chrome,Edge,Firefox。V8的发布流程跟Chrome浏览器发布流程同步。

91% 的 ECMAScript 2015(ES6) 特性支持

在V8 4.9版本中,我们发布了有史以来最多的一批JavaScript ES2015 新特性,按照Kangax 兼容表(截止2016.1.26),我们已经达到了91%的完成度。V8现在支持解构(destructuring),默认参数,代理(Proxy)对象和反射(Reflect)API。4.9版本支持非严格模式下的块级结构,如classlet,还支持正则表达式的sticky标记和可自定义的Object.prototype.toString输出。

解构

变量声明、参数和赋值现在通过模式匹配支持对对象和数组的解构。例如:

let o = {a: [1, 2, 3], b: {p: 4}, c: {q: 5}};
let {a: [x, y], b: {p}, c, d} = o;            // x=1, y=2, p=4, c={q: 5}
[x, y] = [y, x];                              // x=2, y=1
function f({a, b}) { return [a, b] }
f({a: 4})                                     // [4, undefined]

数组形模式匹配可以通过剩余值模式把数组的剩余部分赋值:

let [x, y, ...r] = [1, 2, 3, 4];              // x=1, y=2, r=[3,4]

另外,模式匹配的元素可以给定默认值以处理没有对应属性的情况:

let {a: x, b: y = a} = {a: 4};                // x=4, y=4
let [x, y = 0, z = 0] = [1, 2];               // x=1, y=2, z=0

解构可以使从对象和数据获取数据的代码更紧凑。

Proxies & Reflect

经过几年的开发,V8现在有一个完全的proxies实现,完全同步到ES2015规范。通过一组开发者提供的钩子定制属性的访问,Proxies是一种强大的虚拟化对象和函数的机制。除此之外,proxies也可以用于实现属性设置的拦截、校验,简化调试和剖析,以及像membranes解锁高级抽象

欲代理一个对象,你必须创建一个定义了各种陷阱(trap)的占位句柄对象,并将它应用到代理虚拟化的目标对象:

let target = {};
let handler = {
  get(receiver, name="world") {
    return `Hello, ${name}!`;
  }
};

let foo = new Proxy(target, handler);
foo.bar

代理对象伴随着反射模块,其为所有代理陷阱定义了适合的默认操作:

let debugMe = new Proxy({}, {
  get(target, name, receiver) {
    console.log(`Debug: get called for field: ${name}`);
    return Reflect.get(target, name, receiver);
  },
  set(target, name, value, receiver) {
    console.log(`Debug: set called for field: ${name}, and value: ${value}`);
    return Reflect.set(target, name, value, receiver);
  }
});

debugMe.name = "John Doe";
// Debug: set called for field: name, and value: John Doe
let title = `Mr. ${debugMe.name}`; // "Mr. John Doe"
// Debug: get called for field: name

更多的关于Proxies和Reflect API的使用,可以参见MDN的Proxy页面的示例章节,及在 Web Fundamentals blog查看我们即将到来Proxies相关文章。

默认参数

在ES5或更低的规范中,可选参数在函数定义中的需要样板式的代码来检查是否参数是未定义:

function sublist(list, start, end) {
  if (typeof start === "undefined" || start === null) start = 0;
  if (typeof end === "undefined" || end === null) end = list.length;
  ...
}

ES2015现在允许函数参数可以具有默认值,以提供更清晰,更简明的函数定义:

function sublist(list, start = 0, end = list.length) { ... }
sublist([1, 2, 3], 1)  // sublist([1, 2, 3], 1, 3)

默认参数和解构当然也可以在一起使用:

function vector([x, y, z] = []) { ... }

sloppy模式下的Classes和词法声明

V8自版本4.1和4.2分别支持词法声明(let, const, 块级function)和类,但至今为止使用到它们需要严格模式。按照ES2015规范,V8 4.9版本中,所有这些特性现在在严格模式之外也启用。这使得可以在开发者工具控制台中制作原型容易得多,但我们还是鼓励开发者升级新代码到严格模式。

未指定模式的情况即是sloppy模式。

正则表达式

V8现在支持正则表达式的新的sticky标记。sticky标记切换字符串中的搜索是从前开始(normal)还是从lastIndexs属性开始(sticky)。在用多个不同正则表达式对任意长输入字符串进行高效解析时,这个行为是有用的。要启用sticky搜索,添加y标志到正则表达式即可:(e.g. var regex = /foo/y;)。

可定制的Object.prototype.toString输出

使用Symbol.toStringTag, 当传递用户定义的类型给Object.prototype.toString现在可以返回自定义的输出。直接或者作为字符串强制的结果:

class Custom {
  get [Symbol.toStringTag]() {
    return "Custom"
  }
}
Object.prototype.toString.call(new Custom)  // "[object Custom]"
String(new Custom)                          // "[object Custom]"

改进Math.random()

V8 4.9版本包含一个Math.random()的实现的改进。如上个月的公告,我们切换V8的PRNG算法到xorshift128+以提供更高质量的伪随机性。

V8 API

请检查我们的API修改汇总。每个主要版本发布后,该文件经常已经更新了几个礼拜了。

积极更新的开发者们可以使用git checkout -b 4.9 -t branch-heads/4.9来体验V8 4.9版本的新特性。另外你可以订阅Chrome’s Beta频道并自己尝试新功能。

目录
相关文章
|
数据采集 存储 XML
Python爬虫:深入探索1688关键词接口获取之道
在数字化经济中,数据尤其在电商领域的价值日益凸显。1688作为中国领先的B2B平台,其关键词接口对商家至关重要。本文介绍如何通过Python爬虫技术,合法合规地获取1688关键词接口,助力商家洞察市场趋势,优化营销策略。
|
算法 搜索推荐 API
微信加人太频繁被限制怎么办?
微信加人限制的技术背景 微信为
|
SQL NoSQL 关系型数据库
超强数据库管理软件推荐-没有之一-还在用Navicat管理本地数据库的吗?还在为Navicat寻求绿色版或者购买正版的费用望而却步吗?DBeaver让你解决所有数据库本地编写问题-优雅草央千澈-DBeaver下载和安装
超强数据库管理软件推荐-没有之一-还在用Navicat管理本地数据库的吗?还在为Navicat寻求绿色版或者购买正版的费用望而却步吗?DBeaver让你解决所有数据库本地编写问题-优雅草央千澈-DBeaver下载和安装
1267 18
超强数据库管理软件推荐-没有之一-还在用Navicat管理本地数据库的吗?还在为Navicat寻求绿色版或者购买正版的费用望而却步吗?DBeaver让你解决所有数据库本地编写问题-优雅草央千澈-DBeaver下载和安装
|
测试技术 异构计算
|
数据可视化
GTD时间管理模型是什么
本文介绍GTD(Getting Things Done)时间管理方法,通过收集、整理、组织、回顾、执行五个步骤,帮助你清空大脑内存,减轻焦虑,提升专注力和生产力,轻松应对挑战,改善工作和生活质量。
570 7
GTD时间管理模型是什么
|
算法 网络安全 开发工具
TLS/SSL 协议-非对称加密(RSA)原理
TLS/SSL 协议-非对称加密(RSA)原理
1365 0
|
XML Web App开发 开发框架
回声嘹亮 之 Go 的 Echo 框架 —— 上手初体验
Echo 是众多 Go Web 框架的一个,根据官网介绍,它有着高性能、可扩展性、极简的特点。
回声嘹亮 之 Go 的 Echo 框架 —— 上手初体验
|
安全 Linux 测试技术
Debian为什么适合普通用户
Debian是一个自由、稳定、安全且适合普通用户的操作系统。它提供广泛的硬件支持、简单的安装过程、平滑的系统升级,以及丰富的软件包资源。凭借强大的社区支持和长期维护,用户可以轻松使用且无需担心安全问题。
820 13
|
Web App开发 移动开发 JavaScript
HTML 音频(Audio)详解
HTML5通过`<audio>`元素为网页音频播放提供了丰富支持。本文将介绍其基本用法、属性(如`controls`、`autoplay`)、事件监听、格式兼容性(MP3、OGG、WAV、AAC),并提供JavaScript控制示例。此外,还将讨论优化技巧,如使用CDN、懒加载及提升用户体验的方法。
|
数据采集 机器学习/深度学习 数据可视化
使用R语言进行统计分析:入门与实践
【8月更文挑战第10天】通过本文,我们介绍了使用R语言进行统计分析的基本流程,包括数据加载、数据清洗、描述性统计、假设检验以及数据可视化等关键步骤。R语言以其强大的功能和丰富的包资源,为数据分析师和科学家提供了强大的工具。随着你对R语言的
1137 3

热门文章

最新文章