ES2015的功能更短?

时间:2016-03-02 14:24:13

标签: javascript ecmascript-6

考虑以下代码(取自mdn):

var a = [
  "Hydrogen",
  "Helium",
  "Lithium",
  "Beryl­lium"
];

var a2 = a.map(function(s){ return s.length });

var a3 = a.map( s => s.length );

是否可以缩短它? E.g:

var a4 = a.map( .length );

以上操作不起作用(导致SyntaxError: Unexpected token .)。

那么在ES2015中有没有办法做到这一点?

3 个答案:

答案 0 :(得分:1)

好吧,您可以尝试定义这样的代理对象:

_ = new Proxy({}, {
    get: (t, name) => x => x[name]
});

然后

var a3 = a.map(_.length)

这是否有意义是另一个问题。

答案 1 :(得分:0)

更短的语法看起来像

   var a4 = a.map(({ length }) => length); // [8, 6, 7, 9]

其中a4元素将在长度上自动调用

答案 2 :(得分:-1)

你不能这样做,因为它会与property accessors的使用方式发生冲突。

来自ECMAScript® 2015 Language Specification

  

在规范文本和算法中,点符号可用于指代记录值的特定字段。例如,如果R是前一段中显示的记录,则R。[[field2]]是“名为[[field2]]的R字段”的简写。

TL; DR语法不正确。在没有哲学的情况下,你无法访问任何财产。