Es6:解构的简短版本

Es6: Short version for destructuring

有没有办法把下面的代码写得短一点?

const { user } = JWT.verify(req.params.token, keys.secretOrKey);
const { email } = user;

我只需要来自 JWT 的 email 属性。

JWT.verify()返回的数据是一个对象:

user: {
    name: 'the name',
    email: 'email@address.com',
    ...
}

解构赋值很厉害:

// shim for example
const JWT = { verify: () => ({
  user: {
    email: 'me@me.me',
    name: 'snek',
  }, 
}) };

///////////////////

const { user: { email } } = JWT.verify();

console.log(email);

注意这里没有声明user

在此处查看更多内容:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment

是的,你可以只写

const {user:{email}} = JWT.verify(req.params.token, keys.secretOrKey);

let test = { user: {
    name: 'the name',
    email: 'email@address.com'
    }}

const {user:{email}} = test;

console.log("user",typeof user);
console.log("email",email)

可以看到,只设置了email,未定义user

但请注意,这仅在定义了 user 时有效,否则会引发错误。

您还可以为 user 对象设置默认值,如下所示:

let test = {/** user: {
    name: 'the name',
    email: 'email@address.com'
    }**/}

const {user:{email}={}} = test;

console.log("user",typeof user);
console.log("email",email)

这样它就不会抛出错误,如果 user 没有被定义

如评论中所述:

const myFunction = {
  user: {
    name: 'the name',
    email: 'email@address.com'
  }
}

const {
  email
} = myFunction.user

console.log(email)