该++;javascript中的运算符
当我有一个加号时,我得到了错误的答案该++;javascript中的运算符,javascript,node.js,Javascript,Node.js,当我有一个加号时,我得到了错误的答案 var b = [069]; var total = 0; total = total + b console.log(total) // total = 069 但是,当我加上第二个加号时,方程看起来是这样的 total = total + + b // total = 69 我得到了69的正确答案。以上只是我的问题的一个简化例子 这很好,但是在使用JSHint时,我得到一个警告说 confusing pluses 不使用++如何才能得到正确答案
var b = [069];
var total = 0;
total = total + b
console.log(total) // total = 069
但是,当我加上第二个加号时,方程看起来是这样的
total = total + + b // total = 69
我得到了69的正确答案。以上只是我的问题的一个简化例子
这很好,但是在使用JSHint时,我得到一个警告说
confusing pluses
不使用++如何才能得到正确答案?另外,这个操作符叫什么?不幸的是,Javascript做了很多隐式转换。。。用你的代码
b + [69]
发生的情况是[69]
(包含数字69
的数组)被转换为字符串,成为“69”
。然后将其连接到b
,在本例中,它也会转换为字符串“0”
。因此,结果是“069”
但是,如果您在数组前面添加另一个一元+
,字符串将转换回一个数字,您将得到一个数字结果添加到b
0 + [69] → 0 + "69" → "0" + "69" → "069"
0 + + [69] → 0 + + "69" → 0 + 69 → 69
确切的规则相当复杂,但考虑到二进制+
的简化形式,使用Javascript可以提高效率:
- 如果两者都是数字,则结果是数字相加
- 否则,它们将同时转换为字符串,结果是串联
,“
作为分隔符
这意味着单元素数组
[1]
将转换为“1”
。。。这显然意味着疯狂的后果,比如[1]==1
将我的评论作为答案发布
+
如果我是正确的,则变量前面的+
会将其转换为一个数字
在控制台中尝试以下操作:
“5”
将返回“5”
(字符串),其中
+“5”
将返回5
(数字)
您可以使用total=parseInt(total)+parseInt(b)
以获得正确的结果,因为parseInt()
将尝试从它获得的任何输入参数中生成一个数字
从理论上讲,您可以将
总数
解析为一个数字,但它很容易出现类似“1”+“0”=“10”
这样的错误,导致10
,从数学上讲,它应该是1
,[069]
是一个数组;您正在将b
初始化为数组值,然后尝试将其与+
运算符一起使用。你期望它做什么?为什么不干脆var b=69代码>?+
如果我是正确的,则变量前面的代码将转换为数字。在控制台中尝试此操作“5”
将返回“5”
,其中+“5”
将返回5
。您可以使用total=parseInt(total)+parseInt(b)代码>以获得正确的结果。这似乎是完美的答案材料@AlexSzabó,试试看:)如果你尝试使用total+-b
,也可以得到相同的答案。如果使用的是+-
,则不需要运算符之间的空格。由于++
被视为增量运算符,因此需要将空格设置为++
。将+
或-
放在符号前,以转换为整数。“不幸的是”您可能希望消除答案的偏差:P@EmileBergeron答案的先进程度与OP的熟练程度无关。他们问了一个问题,他们得到了一个答案。这是无关紧要的。你只是假设行动知识吗?@Emilebergron不幸的是,这真的不重要。这是对这个问题的一个非常正确的回答。你不能为了迎合OP而减少答案,可能会弄错答案。