在 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
的情况下,步骤是:
- 计算一元
-
- 右边的操作数是
String
所以它变成了 Number
+
被评价
- 由于第 2 步,左侧操作数是
Number
,因此 +
操作是加法而不是连接
-
运算符正在执行类型强制转换。字符串转数字类型有一个常见的Javascript习语:
const n = +'60'
这使得 n
在数字上等于 60
,而不仅仅是在字符串形式上。这是相同的交易,只是您使用的是否定运算符,它将反转值上的符号并提供 -60
.
使用+
或-
符号将强制其类型。所以,-'54'+30 会做数学运算,return -24.
但是,如果你这样尝试:
-'54'+'30' // -5430
然后它不会键入强制,因为'54'和'30'都是字符串。而且JavaScript不会强迫它做数学运算。
因此,要强制转换类型,应该有不同的值,例如字符串 + 数字可以进行类型转换,其中字符串将被转换为数字。
关于类型强制如何工作的有用链接?
有关完整详细信息,请参阅 this chart 类型强制规则。
为什么我得到 -'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
的情况下,步骤是:
- 计算一元
-
- 右边的操作数是
String
所以它变成了Number
+
被评价- 由于第 2 步,左侧操作数是
Number
,因此+
操作是加法而不是连接
-
运算符正在执行类型强制转换。字符串转数字类型有一个常见的Javascript习语:
const n = +'60'
这使得 n
在数字上等于 60
,而不仅仅是在字符串形式上。这是相同的交易,只是您使用的是否定运算符,它将反转值上的符号并提供 -60
.
使用+
或-
符号将强制其类型。所以,-'54'+30 会做数学运算,return -24.
但是,如果你这样尝试:
-'54'+'30' // -5430
然后它不会键入强制,因为'54'和'30'都是字符串。而且JavaScript不会强迫它做数学运算。
因此,要强制转换类型,应该有不同的值,例如字符串 + 数字可以进行类型转换,其中字符串将被转换为数字。
关于类型强制如何工作的有用链接?
有关完整详细信息,请参阅 this chart 类型强制规则。