这种方法对于发送请求 JS 是否正确?

Is this approach correct for sending a request JS?

根据布尔值条件,它应该将该消息发送到后端。目前我是这样做的:

async submit() {
...   

 await api.submitProduct (
              productId,
              product.instock.unlimited == false ? 'book' : 'ebook'
              )

所以它应该检查产品的 instock proper 包含无限价值,这是错误的,而不是应该提交 'book' else 电子书。这是正确的方法吗?问题与以下行有关:

 product.instock.unlimited == false ? 'ebook' : 'book'

正如我最初指出的那样,您使用的 == 不会专门检查类型,因此值为 undefined 的项目是一个“虚假”值,最终将被分配到 book 类别。这是因为如果操作数的类型不同,双重等于运算符会强制操作数。

使用 === 将防止这种情况发生,因为只有布尔值明确为 false 的项目才能满足测试标准。通常最佳做法是使用 === 来避免此类情况。

product.instock.unlimited === false ? 'book' : 'ebook'

答案取决于您需要申请的条件。

抽象相等运算符不强制执行类型检查,因此不是最佳做法。事实上,几乎在任何情况下,您都可以不用 ==

查看 MDN 上两个相等运算符之间的区别。

在下面的示例中,如果您希望在您的值实际上是布尔类型和 false 时发送 false,那么您可以使用严格相等运算符

value === false ? 'first' : 'second';

但是,如果您正在寻找 'second' 任何虚假值,那么检查可以很容易地更改为

value ? 'false' : 'second';

注意以下在js中都是falsy值

"" (Empty string)
0 (Number 0)
undefined
null
false

你对 === 的使用感到困惑,这个同时检查类型和值所以你不需要使用大函数来检查 var 是否是 falseundefined 但正确的运算符 ===.

const test = (value) => value === false ? 'book' : 'ebook'

// test with false, return book
console.log(test(false))

// test with undefined, return ebook
console.log(test(undefined))