为啥表达式逻辑表达式`product.id === +id;`中的加号? [复制]
Posted
技术标签:
【中文标题】为啥表达式逻辑表达式`product.id === +id;`中的加号? [复制]【英文标题】: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" === NaN
和 pareFloat("123bob") === 123
- 所以它不是 @987654330 @它是similar but not the same
parseFloat 仅在产品标识符使用小数值的情况下才有意义。这几乎是不可能的,所以:这里明显的选择是parseInt(id, 10)
,但根据上下文,它也可能是parseFloat(id)
。
【参考方案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
不是数学意义上的数字。
相关话题:
What is the purpose of a plus symbol before a variable?
Explain +var and -var unary operator in javascript
What's the significant use of unary plus and minus operators?
【讨论】:
以上是关于为啥表达式逻辑表达式`product.id === +id;`中的加号? [复制]的主要内容,如果未能解决你的问题,请参考以下文章