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

假设我们这里有一个代码片段,可产生一些惊人的结果。首先,我们看到模运算符也可以很好地处理字符串(令人惊讶)。其次,两个字符串的连接产生尴尬的结果。

我们需要解释为什么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的最基本主题→Type Coercion。

类型强制

基本上,类型强制是JavaScript编译器用来将一种数据类型更改为另一种数据类型的方法。有效类型强制的示例包括将string更改为boolean,将number更改为string等。

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

它遵循-

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

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

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

与比较运算符,按位运算符或宽松等式运算符[==]一起使用时,数字强制不是二进制+

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

***要注意的另一件事是,一元(+)运算符的优先级高于二元(+)运算符。

代码说明

因此,在清除这些内容之后,让我们转到代码,逐行进行检查-

Line 2 → result = '127' % 5;

隐式强制输入并看到%运算符,因此它会将字符串'127'转换为数字127,并且2存储在结果中-

Line 5 → fullName = firstName + + lastName;
fullName = firstName + (+lastName);

在正常情况下,本来可以从左到右进行计算,但是由于一元运算符的优先级,它首先被计算为Number,并且运算变得像这样

fullName = firstName + NaN;

然后

fullName = ArmaanNaN
猜你喜欢