【问题标题】:Can I use the logical OR operator with Strings in function arguments in JS? Function does not evaluate the second string (I think)我可以在 JS 的函数参数中对字符串使用逻辑 OR 运算符吗?函数不计算第二个字符串(我认为)
【发布时间】:2023-01-10 01:44:13
【问题描述】:

我通过 Vuex 检查后端以有条件地呈现错误消息。我有以下功能:

const getByTitle = (memberTitle) => {
  return state.errors.find(e => e.meta.memberTitle === memberTitle)
       ?.content.error.title;   
}

现在,作为参数,我想传递 2 个字符串,因为此组件中有 2 个选项。

getNumber() {
  return this.getErrorByMemberId('B2Bvr' || 'Cvr' || undefined);
},

如果后端的正确值为转化率,那么在这种情况下,不幸的是我没有收到错误消息(因为它是在B2BVR).如果我更改参数的顺序(请参阅下面的 in-p)并将正确的值放在第一位(转化率),然后它可以正常工作并正确显示错误消息。

getNumber() {
  return this.getErrorByMemberId('Cvr' || 'B2Bvr' || undefined);
},

为什么它在第一个参数中停止?并且不评估第二个?在参数中使用逻辑或运算符的正确方法是什么?

【问题讨论】:

    标签: javascript function vue.js parameters arguments


    【解决方案1】:

    它在第一个参数处停止,因为这是第一个为真的参数,因此其他参数将被忽略。如果您尝试首先使用 undefined(虚假值)调用该函数,它将跳过那个并发送第二个参数。

    实现预期目标的一种方法是将所有可能的参数作为参数数组发送,并在函数中使用 Array.includes()

    getNumber() {
      return this.getErrorByMemberId(['Cvr', 'B2Bvr', undefined]);
    },
    
    const getByTitle = (memberTitleArray) => {
      return state.errors.find(e => memberTitleArray.includes(e.meta.memberTitle))
           ?.content.error.title;   
    }
    

    【讨论】:

    • 第二种方式听起来超级好。在您回答问题之前,这实际上是我处理它的方式!实际上关于您评论的第一句话,因为我真的很想知道发生了什么。它没有停止,因为它是真实的。它实际上是虚假的,它从未进入第二个真实的论点。
    猜你喜欢
    • 2020-02-18
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 2023-03-12
    • 2021-11-28
    • 2018-05-18
    • 2019-02-04
    • 1970-01-01
    相关资源
    最近更新 更多