相关疑难解决方法(0)

箭头在()之后用什么方式起作用?

const actionsMap = {
  [GET_USER]: (state, action) => ({ post: action.msg })
};
Run Code Online (Sandbox Code Playgroud)

我有这个代码,我偶然发现了.我一直在使用{}格式的箭头函数,这个()包装是什么意思?

javascript ecmascript-6

5
推荐指数
1
解决办法
383
查看次数

ES6 Fat Arrow和圆括号`(...)=>({...})`

我一直在研究一些Graph QL/React/Relay示例,我遇到了一些奇怪的语法.

在Graph QL Objects中定义字段时,使用以下语法:

const xType = new GraphQLObjectType({
  name: 'X',
  description: 'A made up type for example.',
  fields: () => ({
    field: {/*etc.*/}
  })
});
Run Code Online (Sandbox Code Playgroud)

从我收集的内容来看,这只是定义一个匿名函数并将其分配给xType.fields.该匿名函数返回包含字段定义的对象.

我假设图形QL模式机制工作,这必须被定义为返回对象而不是简单对象的函数.但令我困惑的部分是花括号周围的括号.

这是为了区分对象定义和函数定义吗?这是为了清晰的读者的缘故吗?

谷歌搜索发现的唯一类似语法是在airbnb风格指南中,它似乎是一个可读性/清晰度的东西.

只是寻找超出我的假设的确认或解释,因为我开始更多地使用Graph QL.

javascript relay ecmascript-6 reactjs graphql

5
推荐指数
2
解决办法
2170
查看次数

为什么我们必须在es6箭头函数中用括号括起来

我想问一下有人知道原因

const fun = msg => throw new Error( msg ); JS是无效的

const fun = msg => { throw new Error( msg ); } 已验证

以来

const fun = msg => new Error( t ); 已验证

有人(我会)也希望这个案例throw是有效的JS.

这个选择背后有什么理由吗?例如它是否使翻译或其他事情变得困难?

javascript ecmascript-6

4
推荐指数
1
解决办法
197
查看次数

意外令牌:使用map形成对象数组

我想生产这个

[
        {name: "james", age: 10},
        {name: "john", age: 12},
        {name: "johnny", age: 56}
    ]
Run Code Online (Sandbox Code Playgroud)

我的下面代码失败了,获得了预期的令牌

let x = [
    {name: "james", age: 10, school: "London"},
    {name: "john", age: 12, school: "India"},
    {name: "johnny", age: 56, school: "USA"}
]

let y = x.map(obj => {name:obj.name, age:obj.age})

console.log(y)
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-6

4
推荐指数
1
解决办法
794
查看次数

lambda 函数中的解构返回意外值

当函数与解构一起使用时返回正确的预期值:
[{"k":"key1","v":"val1"},{"k":"key2","v":"val2"},{"k":"key3","v":"val3"}]

console.log(JSON.stringify([{
  k: 'key1',
  v: 'val1',
  z: 'z1'
}, {
  k: 'key2',
  v: 'val2',
  z: 'z2'
}, {
  k: 'key3',
  v: 'val3',
  z: 'z3'
}].map(function(x) {
  let {k, v} = x;
  return {k, v };
})));
Run Code Online (Sandbox Code Playgroud)

但是,当 lambda 函数与解构一起使用时,返回的值不正确:
[{"k":"key1","v":"val1","z":"z1"},{"k":"key2","v":"val2","z":"z2"},{"k":"key3","v":"val3","z":"z3"}]

    console.log(JSON.stringify([{
      k: 'key1',
      v: 'val1',
      z: 'z1'
    }, {
      k: 'key2',
      v: 'val2',
      z: 'z2'
    }, {
      k: 'key3',
      v: 'val3',
      z: 'z3'
    }].map(x => 
      ({k, v} = x) )));
Run Code Online (Sandbox Code Playgroud)

我如何在 lambda 函数内部使用解构,使其返回与function()上面使用显式相同的结果?

javascript lambda destructuring

4
推荐指数
1
解决办法
4012
查看次数

在Array.reduce中使用扩展表示法

我试图让es6语法适用于此代码片段.

let checkList = [1, 2].map(i => "Check " + i)

let checks = checkList
  // .reduce((acc, check) => Object.assign(acc, {[check]: {valid: false}}), {})
  .reduce((acc, check) => {...acc, {[check]: {valid: false}}}, {})
console.log(checks)
Run Code Online (Sandbox Code Playgroud)

如果我在https://babeljs.io中使用注释行的输出如下所示,这是我想要使用新语法得到的.

Object {
  "Check 1": Object {
    "valid": false
  },
  "Check 2": Object {
    "valid": false
  }
}
Run Code Online (Sandbox Code Playgroud)

我不确定此代码中是否存在语法错误.我尝试选择babeljs中的所有预设,但它无法正确编译.

javascript ecmascript-6 ecmascript-next

4
推荐指数
2
解决办法
2695
查看次数

如何在一行中的地图箭头函数中返回展开运算符

我需要做的是映射数组并在所有对象上将值设置为false.这是我的第一枪:

data = data.map((item) => {
  item.active = false;
  return item;
})
Run Code Online (Sandbox Code Playgroud)

作品!但后来有Eslint,没有param-reassign.所以我必须找到别的东西.经过一些谷歌搜索后,我找到了传播操作员!真棒!我创造了这个杰作:

data = data.map((item) => {
  return {...item, active: false}
})
Run Code Online (Sandbox Code Playgroud)

看起来很酷,也很好用.但是再次有Eslint,箭身式.好的我会在同一行返回对象:

data = data.map(item => {...item, active: false});
Run Code Online (Sandbox Code Playgroud)

不行!:'(我错过了什么?

javascript arrays ecmascript-6 spread-syntax

4
推荐指数
1
解决办法
3217
查看次数

nodejs带表达式的箭头函数

根据文档,您可以从箭头函数返回表达式:

(param1, param2, …, paramN) => expression
     // equivalent to:  => { return expression; }
Run Code Online (Sandbox Code Playgroud)

但这似乎没有像我期望的那样工作(nodejs 4.2.3)

> [1,2,3].map(i => i);
[ 1, 2, 3 ]
> [1,2,3].map(i => {});
[ undefined, undefined, undefined ]
Run Code Online (Sandbox Code Playgroud)

第二个例子不应该返回3个空对象吗?或者我错过了什么?

javascript node.js ecmascript-6 arrow-functions

3
推荐指数
1
解决办法
550
查看次数

为什么函数体中的冒号不会在JavaScript中抛出错误?

我想从箭头函数返回一个对象,但下面的代码正在返回undefined.我意识到花括号被解释为开始/结束函数体.引起我兴趣的是为什么a: 1不抛出错误.

const foo = () => {a: 1};
foo();
// > undefined
Run Code Online (Sandbox Code Playgroud)

javascript arrow-functions

3
推荐指数
1
解决办法
80
查看次数

返回对象的箭头函数简写

我使用缩短的 ES6 箭头函数表示法像这样编写我的函数体

const funcName = (...args) => something
Run Code Online (Sandbox Code Playgroud)

我什至没有使用单个大括号,因为我的函数体只有 1 个 return 语句。

但是说我想从这个函数返回一个对象,我必须这样做:

const funcName = (...args) => {key:val}
Run Code Online (Sandbox Code Playgroud)

这里的问题是 babel 假设大括号内的东西是一个函数体 - 而不是一个对象 - 如何让它认为它确实是一个对象?

javascript function ecmascript-6 arrow-functions

2
推荐指数
1
解决办法
1044
查看次数