为什么将对象键放在方括号中(而不是解构)?

m0m*_*eni 2 javascript object ecmascript-6

看一下这里的例子:

https://github.com/rackt/redux/blob/master/examples/real-world/actions/index.js

return {
    [CALL_API]: {
      types: [ USER_REQUEST, USER_SUCCESS, USER_FAILURE ],
      endpoint: `users/${login}`,
      schema: Schemas.USER
    }
}
Run Code Online (Sandbox Code Playgroud)

CALL_API 在方括号中,所以我假设它可能是一个数组,这是一个解构的东西.

CALL_API定义为

export const CALL_API = Symbol('Call API')
Run Code Online (Sandbox Code Playgroud)

所以它不是数组或任何东西.我也看到了使用非符号的方括号.那么有什么区别呢

CALL_API: {}
Run Code Online (Sandbox Code Playgroud)

[CALL_API]: {}
Run Code Online (Sandbox Code Playgroud)

Sea*_*ira 6

这是一个计算属性 - 它相当于:

let result = {}
result[CALL_API] = { ... };
return result;
Run Code Online (Sandbox Code Playgroud)

结合这个Symbol让图书馆作者创建一个不会与其他协议冲突的协议(例如,如果协议是一个字符串"call",那么它可能会与其他someObject.call用于其(无关)协议的库发生冲突- 以及与之冲突Function.prototype.call. )