JavaScript:为什么 % 运算符适用于字符串? -(类型强制)

javascriptweb developmentobject oriented programming更新于 2025/9/25 8:44:17

假设我们这里有一个代码片段,它产生了一些令人吃惊的结果。首先,我们看到模数运算符也适用于字符串(令人惊讶)。其次,两个字符串的连接产生了尴尬的结果。

我们需要解释为什么 JavaScript 会这样做?

这是问题代码 −

示例

const numStr = '127';
const result = numStr % 5;
const firstName = 'Armaan';
const lastName = 'Malik';
const fullName = firstName + + lastName;
console.log('modulo result: ', result);
console.log('full name: ', fullName);

输出

modulo result: 2
full name: ArmaanNaN

在开始代码之前,让我们先了解一下 JavaScript 最基本的主题之一——类型强制转换。

类型强制转换

基本上,类型强制转换是 JavaScript 编译器用来将一种数据类型转换为另一种数据类型的一种方式。有效类型强制转换的示例包括将字符串转换为布尔值、将数字转换为字符串等等。

类型强制转换是一个非常广泛的主题,为了限制本解决方案的长度,我们将仅探讨此代码片段中使用的内容。在两种类型强制转换中,编译器自动完成的一种类型强制转换称为隐式类型强制转换。

它遵循 −

任何数据类型(原始或非原始)都将隐式强制转换为 −

  • 字符串(与二进制 + 运算符一起使用时)。

  • 数字(与算术运算符(如 +、-、/、*、% 和仅一元 + 触发器)一起使用时

与比较运算符、按位运算符或松散相等运算符 [==] 一起使用时,数字强制转换而不是二进制 +)

  • 布尔值(与逻辑运算符 & | ! 一起使用时)

***另一件需要注意的事情是,一元 (+) 运算符的优先级更高而不是二进制 (+) 运算符。

代码解释

因此,清楚了这些之后,让我们转到代码并逐行查看 −

第 2 行 → result = '127' % 5;

隐式强制转换接受并看到 % 运算符,因此它将字符串 ‘127’ 转换为数字 127,并将 2 存储在结果 −

第 5 行 → fullName = firstName + + lastName;
fullName = firstName + (+lastName);

正常情况下,计算会从左到右进行,但由于一元运算符的优先级,它首先计算为 Number,运算变成这样 −

fullName = firstName + NaN;

然后

fullName = ArmaanNaN

相关文章


有用资源