【问题标题】:Why is string number addition not coalescing intuitively [duplicate]为什么字符串数字加法不能直观地合并[重复]
【发布时间】:2021-08-06 09:48:57
【问题描述】:

为什么最后一个操作返回 20?

console.log(2 + 2); // equals 4
console.log("2" + "2"); // equals "22"
console.log(2 + 2 - 2); // equals 2
console.log("2" + "2" - "2"); // equals 20

【问题讨论】:

  • 事实上,"2"+"2"-"2"+"2" 返回“202”,这很有趣
  • 因为 22 - 2。请注意,字符串没有 - 运算符,因此 "22" 被强制转换为数字 22
  • 请不要上传images of code。它们不能被复制来重现问题,它们不能被未来的读者搜索,它们比文本更难阅读。请以文本形式发布实际代码以创建minimal reproducible example
  • @NishantShamVispute "2"+"2"-"2"+"2" -> "22" - "2" + "2" -> 20 + "2" -> "202"
  • @VLAZ 必须有几个问题将它们链接在一起。

标签: javascript


【解决方案1】:

+- 从左到右计算。当任一操作数为字符串时,结果为连接。当两者都是数字时,结果是加法。

相比之下,- 将始终强制双方使用数字。

'2' + '2' - '2'

// left-to-right
('2' + '2') - '2'
// both sides are strings, so concatenate
'22' - '2'
// operator is -, so coerce both sides to numbers
22 - 2
20

【讨论】:

    【解决方案2】:

    符号+- 在字符串连接中的工作方式非常不同。 + 运算符对字符串提供直接连接指令,而 - 运算符试图强制类型并执行数学函数。

    console.log("2" + "2");
    console.log(typeof ("2" + "2"));
    
    console.log("2" - "2");
    console.log(typeof("2" - "2"));

    【讨论】:

    • "+ 运算符对字符串提供直接连接指令,而 - 运算符尝试强制类型并执行数学函数。" + 运算符也将执行强制当使用混合类型的操作数时。如果这三个都是包含有效数字的字符串,那么 s1 - s2 + s3 会发生什么。 s1 - s2 会产生一个数字,+ s3 会强制返回字符串。
    • + 运算符将尝试通过强制执行连接,如果给出非字符串值。
    • 是的,正如我所说:“当使用混合类型操作数时。
    • 是的。这是一种表达方式。
    猜你喜欢
    • 2021-02-04
    • 2023-03-09
    • 2022-12-10
    • 2011-12-07
    • 1970-01-01
    • 2020-09-25
    • 2014-08-29
    • 1970-01-01
    • 2017-11-08
    相关资源
    最近更新 更多