JavaScript 未来的功能

大家都觉得 ES6 带来这么多新功能,让人很兴奋。
同样让人兴奋的是,在 ES6 之后,JS 将保持一年一次的迭代频率,这使得 JS 能紧跟时代,保持充沛的生命力。

JS 的迭代方式是“提案制”,即谁都可向 Ecma TC39 提出迭代方案,方案过了初审后,便要走 stage0 ~ stage4 的流程,stage4 表示提案确定被采纳,但提案走到 stage2 基本就确定会被采纳。如开发中常用的 stage3 的 import() ,stage2 的 Decorator 等等。

下面介绍几个虽处于 stage1,但很棒的提案。
PS: 其实这些功能,原生JS 和 Lodash 都能实现...
那么,既然都能实现了,为啥新版本还有加入这些功能?
嗯,这是个好问题...

先说实现了 函数式编程 中 柯里化 和 compose 的两个功能:

1. partial-application - 柯里化,亦可叫 偏函数

例如,我们分别用 原生JS,Lodash 和 partial-application 实现将 add(a, b) 柯里化为 addTen(n):

function add(a, b) {
  return a + b;
}

// 原生JS:
const addTen = add.bind(null, 10);

// Ladash:
const addTen = _.curry(add)(10);

// partial-application:
const addTen = add(10, ?);
// 或者
const addTen = add(?, 10);

上面三者,都实现了柯里化的效果,但细微之处还是有区别:

  • 原生JS通过 bind() ,但这与 bind 的主要用途不符,降低了代码的可读性。
  • Lodash 用 _.curry() 有不错的可读性,但也需要对闭包有一定的了解才能熟练地使用。
  • partial-application 极大简洁了实现的代码,并且并不止于柯里化中必须将参数从左至右一个个“reduce”的形式,甚至开发者都不需懂得柯里化的概念,便能很好地使用该功能。

2. pipeline-operator - compose,亦 node 中的 Stream

开发中,我们经常会遇到,某一数据,要将其依次经几个函数处理。
如我们要将 "hello" 经下面三个函数处理后,输出 "Hello, hello!":

function doubleSay (str) {
  return str + ", " + str;
}
function capitalize (str) {
  return str[0].toUpperCase() + str.substring(1);
}
function exclaim (str) {
  return str + '!';
}

我们分别用 原生JS,Lodash 和 pipeline-operator 实现看看:

// 原生JS:
exclaim(capitalize(doubleSay("hello")));  //"Hello, hello!"

// Lodash:
_.flow([
  doubleSay
  capitalize
  exclaim
])("hello");    //"Hello, hello!"

// pipeline-operator:
const result = "hello"
  |> doubleSay
  |> capitalize
  |> exclaim;
console.log(result);  // "Hello, hello!"

如上,三者都能实现 compose 的效果,而三者的表现形式还是如上面实现 柯里化 很接近:

  • 原生JS 都写法,可读性差。
  • Lodash 用 _.flow() 有不错的可读性,也还是运用了闭包。
  • pipeline-operator 最大程度简洁了代码。

3. optional-chaining - 链式引用

当我们深层引用一对象都属性时,往往每层都引用都需做 undefined 判断,以防止 undefined.xxx 报错。 特别是在使用 ajax 传来的 json 时,更是要小心翼翼,因为 ajax 的数据会有各种不确定性。
所以,在 原生JS 中,我们经常会这样写:

var house = user.address && user.address.street && user.address.street.house;

使用了 lodash 的 _.get() 我们可以这样写:

var house = _.get(user, 'address.street.house')

而有了 optional-chaining 我们可以这样写:

var house = user.address?.street?.house;


以上,就是 stage1 中很酷的几个提案。
从中可以看出,除了扩展 JS 的能力,JS 还在朝使用更简单、可读性更好、增强函数式编程的能力、引入更多的设计模式等方向发展。

回到最开始的问题,既然用 hack 或 Lodash 能实现的功能,为啥 JS 还要加入这些功能?
我觉得让 JS 更简单易用的目的不言自明。
更重要的是 hack 技巧或 Lodash 很多开发人员并不会掌握的很好,而这些功能又是这么的有价值。
将这些功能集成进 JS 后,能更好的推广这些有价值的功能,进而提升 JS 世界的整体能力。
从宏观角度看,这种价值是巨大的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容

  • 此Deck为我近期给组内分享的有关ES展望的Session,如下。 Slide1: 先说一下我为什么讲这个Sess...
    Pursue阅读 926评论 0 2
  • 官方中文版原文链接 感谢社区中各位的大力支持,译者再次奉上一点点福利:阿里云产品券,享受所有官网优惠,并抽取幸运大...
    HetfieldJoe阅读 2,277评论 2 11
  • 官方中文版原文链接 感谢社区中各位的大力支持,译者再次奉上一点点福利:阿里云产品券,享受所有官网优惠,并抽取幸运大...
    HetfieldJoe阅读 3,603评论 2 27
  • 一个题目两篇文章,一个公开,一个隐私,还是有些不愿公开的东西,每年的年末自己都要对过去一年做个总结,今年也不例外,...
    随风飘零的小雨阅读 82评论 0 0
  • 概述 后表线的连接并保护整个身体的后面,分为脚趾到膝盖,以及膝盖到额头两部分。 当膝盖伸直时,后表线成为整个肌筋膜...
    厚_德_载_物阅读 3,082评论 2 16