这些ES6语法真正改变了什么?

时间:2017-08-14 05:35:39

标签: javascript ecmascript-6

尝试学习一些功能性的javascript和es6概念。

我有一个数组

var _ = require('underscore');
var raw =[
  {
    key :"name",value:"henry"
  },
  {
    key :"age",value:"old"
  },
  {
    key :"food",value:"matooke"
  },
  {
    key :"kids",value:"Acacia"
  },
  {
    key :"garbageA",value:"kasailoA"
  },
  {
    key :"garbageB",value:"kasasiroB"
  },

]

我正在尝试使用垃圾密钥过滤掉数据。我有两个代码返回不同的结果,我想知道为什么他们不会返回相同的结果。 我写的时候

const endShape = _(raw)
.filter(key =>!/garbage/.test(key));
console.log(endShape);

在我的控制台中打印。

[ { key: 'name', value: 'henry' },
  { key: 'age', value: 'old' },
  { key: 'food', value: 'matooke' },
  { key: 'kids', value: 'Acacia' },
  { key: 'garbageA', value: 'kasailoA' },
  { key: 'garbageB', value: 'kasasiroB' } ]

显示我的过滤器dint有效。

我写的时候

const endShape = _(raw)
.filter({key} =>!/garbage/.test(key));
console.log(endShape);

它带来语法错误。

但是当我写作

const endShape = _(raw)
.filter(({key}) =>!/garbage/.test(key));
console.log(endShape);

我的过滤器运行良好并打印

    [ { key: 'name', value: 'henry' },
  { key: 'age', value: 'old' },
  { key: 'food', value: 'matooke' },
  { key: 'kids', value: 'Acacia' } ]

为什么会这样?但我从phat arrow语法知道可以写

var x = y=>y+1;

以及

var x =(y)=>y+1

1 个答案:

答案 0 :(得分:4)

实际上,过滤器的第一个和第二个键是完全不同的。

在你第一次运行时:

const endShape = _(raw)
.filter(key =>!/garbage/.test(key));

您正在从raw数组传递一个对象,并且您的支票正在评估如下: !/garbage/.test({ key: 'name', value: 'henry' }) 总是被评估为false,然后你否定它,所以每个条件都是真的,因此你的过滤器让每个条目都通过。

在第二轮你做:

const endShape = _(raw)
.filter(({key}) =>!/garbage/.test(key));

您从对象destructuring key开始,因此测试有意义,并且您的过滤器工作正常!

希望它有所帮助!