【问题标题】:Why the plus sign in the expression logical expression `product.id === +id;`? [duplicate]为什么表达式逻辑表达式`product.id === +id;`中的加号? [复制]
【发布时间】:2018-08-08 23:10:50
【问题描述】:

查看 javascript 表达式:

return product.id === +id;

我以前从未在像这样的变量前面看到过+ 符号...有什么想法吗?

【问题讨论】:

  • 查看 javascript 中的类型强制 - 甚至是一元 +
  • 不,不管product.id是什么,它都会把它变成一个数字。
  • 这基本上是一种“强迫” JS 做正确事情的愚蠢方式。写这篇文章的人使用=== 来确保JS 确实 使用强制,然后他们立即强制它使用强制表达式将id 的值强制为一个数字。正确的意向代码等效项是 product.id === parseInt(id, 10);
  • 实际上你会 parseFloat 而不是 parseInt 是(几乎)等价的,因为一元 + 不会产生整数,它会产生一个数字 - 除了 +"123bob" === NaNpareFloat("123bob") === 123 - 所以它不是 @987654330 @它是similar but not the same
  • parseFloat 仅在产品标识符使用小数值的情况下才有意义。这几乎是不可能的,所以:这里明显的选择是parseInt(id, 10),但根据上下文,它也可能parseFloat(id)

标签: javascript


【解决方案1】:

如果成功,它将变量转换为数字:+id 等于 Number(id)。如果转换失败,则返回 NaN

【讨论】:

    【解决方案2】:

    变量前面的加号称为Unary Operator,用于将变量转换为数字。如果值为数字,则运算结果为数字,否则为NaN

    您可以将+ 运算符的功能大致等同于parseFloat。但是请注意,前者只能解析数字字符串,而后者可以提取数字值,即使它后面跟着另一个不是数字的值。

    示例:

    var a = "0x";
    
    console.log("Unary Operator:", +a);
    console.log("parseFloat:", parseFloat(a, 16));

    在您的特定情况下,它用于确保如果转换为数字,id 严格等于product.id。如果id 不是数字,该函数将返回false,因为product.id != NaN,即使product.id 本身等于NaN

    示例:

    var
      id1 = 13,
      id2 = "13",
      id3 = "a13";
    
    console.log("number:", id1);
    console.log("numeric string:", +id2);
    console.log("non-numeric string:", +id3);
    console.log("NaN !== NaN:", +id3 !== +id3);

    请注意:

    尽管NaN 的字面意思是"Not a Number",但如果您使用typeof NaN,结果将是"number",即使NaN 不是数学意义上的数字。


    相关话题:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-23
      • 1970-01-01
      • 2012-11-17
      相关资源
      最近更新 更多