J'ai récemment rencontré quelqu'unjs
的题,题目是这样的。var str = 'abc' ;
typeof (str++)
;
最开始我以为返回的是String类型的值!但是结果却是Number,让我很费解!
我理解的思路是,首先拆开 str++ , 也就是str = str+1; 这不就是字符串拼接么。返回的还是str啊。
但是当我打印出来 str++ 之后 却是一个NaN的类型。typeof(NaN)
qui est du type Numéro !
En d'autres termes, console.log(str++)
console.log(str++)
console.log(str = str+1)
console.log(str = str+1)
ne sont pas équivalents !
Excusez-moi, pourquoi ça ? ?
Écrit en programmation JavaScript avancée,
++
和--
是递增递减的一元操作符,只能操作一个数据,和加性操作符+
是不一样的,他首先会把操作数转换为Number类型,然后进行加一或减一操作。所以
str = str+1
不等于str++
Parce que lors de l'utilisation de str++, js a implicitement converti le type de chaîne de str en un type numérique
console.log(str++) ++ essaiera de convertir str en nombre si la conversion automatique échoue, il deviendra NaN
.console.log(str = str+1) +À ce moment, essayez d'épisser la chaîne et elle devient abc1
Il n'y a rien dans js qui garantit que a++ et a=a+1 sont équivalents.
++
只有<number>
重载,+
有<string, string>
和<number, number>
Recharger. Même si le comportement n’est pas pris en compte, les types ne sont plus équivalents.D'autres langages peuvent exister, et ne doivent pas être confondus avec JS.
Tout d'abord, votre compréhension est fausse. str++ n'est pas complètement équivalent à str+=1 Ici, il doit seulement être compris comme un auto-incrémentation, mais l'auto-incrémentation ne s'applique qu'aux nombres, donc str++ effectuera d'abord une conversion de type implicite, et la valeur de str est 'abc' est NaN après conversion. La valeur de retour de typeof NaN est Number
.