为什么1 + '1'= & # 39; 11 & # 39;但是1 * & # 39;1 & # 39;
Why is 1 + '1' = '11' but 1*'1' = 1
操作
1 + '1'
,
将数字1转换为字符串并追加到后面的字符串那么为什么
不是这样呢? 1 * '1'
因为+
过载
+
既可以表示加法,也可以表示字符串拼接。在前一种情况下,JavaScript尝试进行字符串连接而不是加法,因此它将所有内容转换为字符串并执行字符串连接。在后一种情况下,唯一的选择是乘法,因此它将所有内容转换为可以相乘的内容并执行乘法。
dfsq在您的问题下的评论中链接了添加语法的规范,这解释了为什么JS尝试字符串连接而不是添加:它检查您添加在一起的东西是否为字符串,然后如果其中至少有一个是,尝试字符串连接-否则,尝试添加。
+
是字符串的连接操作符。结果,该数字被转换为字符串,然后进行连接。串联优先于数字加法。如果您想让它添加它们,则使用parseInt,如1 + parseInt('1')
*
根本不是一个有效的字符串操作符,因此它将字符串转换为数字,然后再进行操作。
这是一个简单的情况,所以操作数的顺序无关紧要。如果你变得更复杂,它会变得更有趣。例如:
1 + 1 + '1' = '21'
'1' + 1 + 1 = '111'
有关更多信息,请查看MDN关于此事的文章
+
用于字符串连接*
用于乘法
In 1 +' 1' '+'将连接1和'1'
你需要做以下事情
1 + parseInt('1')
在javascript中+表示连接。这就是为什么当你尝试添加一个数字(即:1)到字符串('1'),它变成11。它将*视为乘法,因此它将数字(1)与字符串('1')相乘并给出结果为1。例(1*a= a).
"+"运算符用于字符串连接和普通的数学加法,所以当我们在数字和字符串之间使用这个运算符时,它只会将这两个连接起来。但是"*"运算符不像那样,它只会执行乘法,如果它在数字和纯字符串之间使用,它不会给出正确的输出。但是,如果在数字和字符串格式的数字之间使用,它将把两者都视为数字并给出两者的乘法。
- 为什么typeof(null)返回“;对象”;,但是你可以't为其分配属性
- 为什么 (23 == 真) 假但是 (!!23 == 真)真的吗?毕竟有===用于精确比较
- ExtJs: Form isValid() 是假的.但是如何知道为什么表格无效
- 为什么当我将变量记录到控制台时,我得到了输出,但是当我返回它时,我收到“未定义”
- 为什么“ 新字符串('我的字符串');“ 返回一个对象?但是“ 字符串(”我的字符串“);“返回一个字符
- 为什么<车身负载=“;fn()">使用函数调用,但是window.onload=fn;使用处理程序函
- ng点击里面的动画,但是事件没有开火,为什么
- 为什么jQuery's的promise有一个done(),但是Javascript'Mozilla记录的
- 为什么getElementsByTagName()[0]返回's,但是getElementById()[0]返回
- 日期月是零索引.但是为什么
- 为什么1 + '1'= & # 39; 11 & # 39;但是1 * & # 39;1 & # 39;
- anyDefinedFunction.caller是空的,但是为什么Math.anyMathFunction.calle
- 将JavaScript对象序列化为JSON返回“{}}”,但是为什么呢?
- 为什么继承的对象成员可以通过键访问,但是隐藏了'
- 与变量值同名的函数存在,但是接收到typeError,为什么?
- 为什么B有效但是B无效
- Eclipse:禁用Javascript验证.但是为什么它仍然产生错误
- $http angularjs的数据,在缓存?但是为什么
- 此引导按钮下拉列表不起作用.但是为什么
- 在JavaScript中,分号是可选的,但是为什么要使用它呢?