请教原生js简写法

// 有一个公共的 a 对象
let a = {
   page: 10
   ……还有一大堆属性……
}

function load1(page){
    // 每次使用 a 之前,都要这样处理一下,我感觉很啰嗦
    if (page) {
       a.page = page;
    }
    fetch(a).then(...)

    // 想问下,有办法把前面那个 if 省掉吗,比如类似下面这样(有bug):
    fetch( {...a, ...{page}} ).then(...)

    // 因为 page 可能是 undefined ,希望只有 page 有值的时候替换掉 a.page
}
阅读 2.3k
4 个回答

如果需要保留 page 属性在 a 上,可以采用评论里的;

// page 为 undefined 或者 null 则不会赋值
a.page = page ?? a.page

// 同时过滤去空字符串这种 falsy 值就用 ||
a.page = page || a.page

如果不需要把 page 保留在 a 上,可以直接解构:

fetch({ ...a, page: page ?? a.page }).then(...)

非要用spread operator去实现的话写起来可能更麻烦,而且不会去修改a了,语义不一致可能会出bug

fetch({
  ...a,
  ...(page ? {
    page
  } : {})
}).then(...)
fetch({
  ...a,
  page: page || a.page,
}).then(...)

你说的undefined是没传值还是传了undefined,如果是有可能不传值,可以函数设置默认值,如
function load1(page=1){}

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题