即使条件为假,为什么我的 if 返回“else-part”?

问题描述 投票:0回答:1

我对此很陌生,也许我不知道如何问这个问题,但希望有人可以帮助我。

我在项目的 get 函数中使用了一个简短的 if 语句,但它没有返回我期望的结果。这是我的代码:

async function getPrice(stock) {
  const response = await fetch(`https://stock-price-checker-proxy.freecodecamp.rocks/v1/stock/${stock}/quote`, {
    method: 'GET',
    credentials: 'same-origin'
  });
  const { symbol, latestPrice } = await response.json();
  return { symbol, latestPrice };
}

module.exports = function (app) { 
  
  app.route('/api/stock-prices') 
     .get(async function (req, res) {
    // get all parameters necessary for response
    const { stock, like } = req.query;
    const { symbol, latestPrice } = await getPrice(stock);

    // if cant find stock
    if(!symbol) {
      ////// console.log(like);
      res.json({ stockData: {
        error: "invalid symbol",
        likes: like ? 1 : 0
      }});
      ////// console.log(like);
      return;
    }
  });
};

Like 来自复选框输入。

无论“like”是真还是假(复选框是否选中),简短的 if 语句始终返回 1。

两个console.log都显示“false”,但res.json仍然显示“likes: 1”

我已经改变了无数的事情,但还没有找到原因,我不知道它是否可能在其他地方,但其余的代码是一个样板,不是我制作的,所以它应该是正确的。

javascript json if-statement
1个回答
0
投票

如果

console.log
显示您正在返回
"false"
(请注意引号),则 like 的值将以 String 类型返回,而不是 Boolean 类型。如果是这种情况,“true”和“false”都将解析为 true,因为它们是非空字符串。如果是这种情况,我们可以简单地稍微改变三元中的逻辑来显式检查“true”字符串值。

if(!symbol) {
  res.json({ stockData: {
    error: "invalid symbol",
    likes: like === "true" ? 1 : 0
  }});
  return;
}

您可能想更改该值在早期的保存方式,以便将其解析为布尔值,特别是如果您稍后要使用该值,因为如果您逻辑上期望布尔值,但实际上这显然会导致麻烦给出一个字符串包裹的表示形式。但如果这是一次性值检查,并且您知道该值只能是“true”或“false”而不能是其他值,那么上述解决方案可能就足够了。

© www.soinside.com 2019 - 2024. All rights reserved.