const actionsMap = {
[GET_USER]: (state, action) => ({ post: action.msg })
};
Run Code Online (Sandbox Code Playgroud)
我有这个代码,我偶然发现了.我一直在使用{}格式的箭头函数,这个()包装是什么意思?
我一直在研究一些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.
我想问一下有人知道原因
const fun = msg => throw new Error( msg ); JS是无效的
const fun = msg => { throw new Error( msg ); } 已验证
以来
const fun = msg => new Error( t ); 已验证
有人(我会)也希望这个案例throw是有效的JS.
这个选择背后有什么理由吗?例如它是否使翻译或其他事情变得困难?
我想生产这个
[
{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) 当函数与解构一起使用时返回正确的预期值:
[{"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()上面使用显式相同的结果?
我试图让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中的所有预设,但它无法正确编译.
我需要做的是映射数组并在所有对象上将值设置为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)
不行!:'(我错过了什么?
根据文档,您可以从箭头函数返回表达式:
(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个空对象吗?或者我错过了什么?
我想从箭头函数返回一个对象,但下面的代码正在返回undefined.我意识到花括号被解释为开始/结束函数体.引起我兴趣的是为什么a: 1不抛出错误.
const foo = () => {a: 1};
foo();
// > undefined
Run Code Online (Sandbox Code Playgroud) 我使用缩短的 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 ×10
ecmascript-6 ×8
arrays ×1
function ×1
graphql ×1
lambda ×1
node.js ×1
reactjs ×1
relay ×1