在Nordic.js 2014 大会上,Douglas Crockford 分享了一次他心中的 JavaScript 语言中的出色部分,他聊了 ECMAScript6。我做了一个简单总结,大家可了解一下。
伯乐在线注:方便翻墙的朋友,可在 Youtube 观看 完整演讲视频 。
他认为 ES6 中的出色部分:
- ES6 新引进的 尾部调用优化 使 Javascript 真正变为了一个函数式编程的语言
- ES6引入 rest 运算符(…),用于获取函数的多余参数
- 模块 —— 为了避免使用全局变量
- 可以使用 let 语句定义块范围变量 -> “
let
是一种新的 var
“ - 解构语句 let {a, b} = obj ,相当于ES5中的
var a = obj.a, b = obj.b;
- WeakMap 有一个糟糕的名字, 没人想使用一个弱类型,而是都喜欢使用强类型
ES6 的糟糕部分:
他承认 ES6 中所有的东西都是新的,很难判断他们将成为好的部分还是相反,但有些部分,他现在就感觉将成为糟粕
- 最糟糕的是class , 这个关键字是属于Java 开发者的, 它们不想使用Javascript , 是给那些不知道自己有多么可怜的人准备的
- Generators – 带来的复杂度远超过价值
- 还有一些他原来认为是出色部分,不过现在他不这么认为了
- 他不再使用 new关键字, 而是使用 Object.create
- 他也不再使用 Object.create (尽管这是给他增加的仅有的关键字)
- 不使用 this,所以这个改变对他没有什么
- 他不使用 null, 他认为没有任何必要存在两种类型表示未定义 :null 和 undefined
- 他不再使用 falsiness
- 他不再使用 for 语句,而是只使用原生数组的方法或者 Object.keys
Object.keys(obj).forEach(function(key) { /* ... */ });
关于下一代 JavaScript 语言的一些感想:
- 从Dart 和 TypeScript 中没有看到我们需要改变的东西
- 普及语言是一件很困难的事情,因为程序员是很对这件事很敏感,每一个改变都需要很长时间才能被接受
- 离开类是一件很好的事情,但是他不再是一个原型继承的支持者
- 他倡议使用闭包来写对象,从而带来 class-free 的面向对象。像下面这样:
function constructor(spec) { let { member } = spec, { other } = other_constructor(spec), method = function() { // member, other, methid, spec }; return Object.freeze({ method, other }); }
- 他同时提议下一代语言中需要的一种新的数字类型,称为 DEC64 ,使用这种新的类型(一种而且是唯一一种),可以解决
0.1 + 0.2 != 0.3 这种问题。(二进制浮点起源于1950年)他还谈到了两种类型的需求,业务与sceintific - 确切说是百分值与近似值。
我认为这是一个很有趣的演讲,Douglas Crockford 有很多关于现代 Javascirpt 的看法, 虽然有些看法很具争议,你对此看法如何,你是否同意他的观点,或者有好的看法,可以在评论中表达出来。