【问题标题】:How does the conditional operator work with a negation?条件运算符如何与否定一起使用?
【发布时间】:2020-06-07 18:34:37
【问题描述】:

我开始学习异步 javascript,虽然我确实了解回调和承诺,但我正在学习的代码的一些内容引起了我的注意。例如:

function funcA(){
    console.log('World')
}

function funcB() {
    return new Promise((resolve, reject) => {
        console.log('Hello')

        const error = false
        !error ? resolve() : reject('Error')
    })
}

funcB()
.then(funcA)
.catch(err => console.log(err))

在这种情况下,!error 不是说 if(error === true) 然后解决它,else (error ===假),拒绝()?

或者简单地说“如果没有错误,那就解决”?

【问题讨论】:

  • 三元运算符最好用作表达式(作为函数、赋值等的参数)。在这种情况下,普通的if .. else 就足够了。
  • 这不是回调或承诺的问题。正如@Tibebes.M 所说,本质上是 if (error) { reject() } else { resolve() }
  • 我是在上完关于 promise 的课程后自己编写的代码,所以在这种情况下,我不应该使用三元运算符吗?我以为我会用它只是为了节省空间 =) 关于代码,我想我被 (not) 运算符弄糊涂了,我相信它会改变错误的值,而不只是说“如果没有错误,然后解决”。在我的脑海中,not 运算符总是将语句从 true 更改为 false(反之亦然)。
  • @JoãoGabrielOnofre !error ? resolve() : reject('Error') 等同于 error ? reject('Error') : resolve()。是的,if 语句会更简洁,如果它降低了代码的可读性,那么节省空间并不是一个好理由。

标签: javascript conditional-operator not-operator


【解决方案1】:

在您提供的示例代码中,!error ? resolve() : reject('Error') 行将显示“如果没有错误,请解决,否则拒绝并显示消息'错误'”。

重要的是要注意行首的非运算符(!)。这将等同于以下内容:

const error = false
if (!error) {
    resolve()
} else {
    reject('Error')
}

【讨论】:

  • PS:我相信错误只是设置为一个常量 false 作为示例,但您可以用适当的错误检查代替它
  • 对,也可以直接看成if (error === false) {...}
  • 我想我被 (not) 操作符弄糊涂了,我相信它会改变错误的值,而不只是说“如果没有错误,那么解决”。在我的脑海中,not 运算符总是将语句从 true 更改为 false(反之亦然),但现在我知道 not 运算符在告诉我什么,谢谢 =D
  • 我看到了混乱。 (not) 运算符不会自行修改值。如果需要,您仍然可以将结果分配给变量。如果此答案有帮助,请将其标记为已接受的答案,否则您可以等待其他答案可能会更好地解释。
  • 帮助很大,谢谢!检查它作为接受的答案;)
猜你喜欢
  • 2016-06-28
  • 2013-04-21
  • 2020-04-22
  • 1970-01-01
  • 1970-01-01
  • 2014-08-21
  • 2011-02-22
  • 2020-01-29
  • 1970-01-01
相关资源
最近更新 更多