我想提醒以下人员,
1. alert(1+1+1+1+1);
//output: 5
2. alert('1'+1+1+1+1);
//output: 11111
3. alert(1+1+1+1+'1');
//output: 41
4. alert(1+1+'1'+1+1);
//output: 2111
有人能解释警报中的邮件类型吗?
先谢谢你。
答案 0 :(得分:2)
好吧,在javasciprt中,数字+数字+数字=数字(你的情况1)
然后,字符串后面的数字与字符串连接,并产生一个字符串作为输出' 1' +1 =' 11' + 1 =' 111'等等。 (你的案子2)
在第三种情况下,字符串只是在数字的末尾,它被转换为字符串,结果将只是数字,后跟字符串形式的字符串.2 +' 432&#39 ; =' 2432'。
最后一种情况是以上所有的混合1 + 1 = 2 +' 1' =' 21' +1 =' 211' +1 =' 2111'。
答案 1 :(得分:-1)
Javascript是一种弱类型语言,运算符重载。这就是为什么你会得到那些“奇怪”的行为。
哇,操作员超载。啊? javascript中的+
有多个功能。一个是:adding up numbers
,另一个是concatenating strings together
。这称为运算符重载。与PHP相比,加起来的数字为+
,但串联的字符串为.
运算符重载的一个大问题是。如果我们有String + Number怎么办?或者数字+字符串?
适用不同的规则:
1+1+1+1+1
这很简单,加了5个数字。
'1'+1+1+1+1
这比较难。他看到的是一个字符串,所以他将它与下一个部分(第二个1
)连接起来。然后他继续说道。 String(11)+ 1,给出String(111)等等。
第三个例子很有趣。他开始将所有数字加起来,直到他到达最后+
个符号。它没有Number(4)+ String(1)。因此,他将Number转换为字符串并将它们连接在一起。
最后一个例子也是如此。如果两者中的一个是String,则+
符号将被解释为Contatenation。
答案 2 :(得分:-1)
我正在阅读w3school的Automatic type conversion,我认为这与你的问题有关。
它说:
当JavaScript尝试对“错误”数据类型进行操作时,它会尝试将值转换为“正确”类型。
它说结果并不总是你所期望的:
5 + null // returns 5 because null is converted to 0
"5" + null // returns "5null" because null is converted to "null"
"5" + 1 // returns "51" because 1 is converted to "1"
"5" - 1 // returns 4 because "5" is converted to 5