在 Javascript 为什么 -'54'+30 的结果是 -24(在 javascript 中输入强制)

In Javascript Why result of -'54'+30 is -24(type coercion in javascript)

为什么我得到 -'54'+30 表达式的结果为 -24 但是当我试图从表达式中删除 (minus)- 时它只是字符串的连接并给出 5430 作为 output.Can 有人解释它是如何工作的。

console.log(-'54'+30)
console.log('54'+30)

因为unary negation has a higher operator precedance比加法

一元取反也将其操作数转换为 Number Per ECMA Spec 2017:

The unary - operator converts its operand to Number type and then negates it. Negating +0 produces -0, and negating -0 produces +0.

-'54'+30 的情况下,步骤是:

  1. 计算一元-
  2. 右边的操作数是 String 所以它变成了 Number
  3. +被评价
  4. 由于第 2 步,左侧操作数是 Number,因此 + 操作是加法而不是连接

- 运算符正在执行类型强制转换。字符串转数字类型有一个常见的Javascript习语:

const n = +'60'

这使得 n 在数字上等于 60,而不仅仅是在字符串形式上。这是相同的交易,只是您使用的是否定运算符,它将反转值上的符号并提供 -60.

使用+- 符号将强制其类型。所以,-'54'+30 会做数学运算,return -24.

但是,如果你这样尝试:

-'54'+'30' // -5430

然后它不会键入强制,因为'54'和'30'都是字符串。而且JavaScript不会强迫它做数学运算。

因此,要强制转换类型,应该有不同的值,例如字符串 + 数字可以进行类型转换,其中字符串将被转换为数字。

关于类型强制如何工作的有用链接?

有关完整详细信息,请参阅 this chart 类型强制规则。