javascript中的数字函数可用于乘法,除法,求余数但不能用于减法和加法?
//I used theNumber = 3
var theNumber = Number ( prompt (" Pick a number " , "") ) ;
alert (" difference " + theNumber - theNumber ) ;
// Difference is NaN, why not 0?
var theNumber = Number ( prompt (" Pick a number " , "") ) ;
alert (" sum " + theNumber + theNumber ) ;
// ->33
为什么会出现连接?为什么不是6? 请帮忙!
答案 0 :(得分:2)
正在进行连接,因为它以字符串开头:
alert ( " sum " + theNumber + theNumber ) ;
-> "string" + Number + Number = "StringNumberNumber"
从此时起,字符串后的+
被视为连接而不是数字加法运算符。如果你想避免这种情况,你可以将你的加法包装在括号中:
alert ( " sum " + (theNumber + theNumber) ) ;
-> "String" + (Number + Number) = "StringEvaluatedParenthesis"
答案 1 :(得分:2)
在javascript中,如果变量是使用冲突类型进行操作的,则解释器会隐式更改(强制)变量类型和操作。
根据link
进行操作根据这个来源,(...)具有从左到右的关联性,这意味着它从左到右执行操作。
所以(5 + 4 + 6);将细分为:
您的问题需要您了解上述两个主题。 现在,
var theNumber = Number ( prompt (" Pick a number " , "") ) ;
alert (" difference " + theNumber - theNumber ) ;
差异NaN为什么不是0?
因此,请使用新的JS功能并思考(...)如何工作。
假设theNumber = 3;
string + string在JS中以连接的形式有效,但是' - '运算符不适用于字符串,因此强制再次将“差异3”转换为返回NaN的数字。
console.log(NaN - 5);
FUN FACT :console.log(NaN - NaN); //也是NaN!
var theNumber = Number ( prompt (" Pick a number " , "") ) ;
alert (" sum " + theNumber + theNumber ) ;// ->3// ->33
这一次:
答案 2 :(得分:0)
因为Javascript不是严格类型的语言,并且当它以字符串开头时需要执行转换,所以数字3被转换为字符串并且输出是它们的串联。如果你添加括号(theNumber - theNumber),它会将这两个作为数字处理,但是它会将结果转换为字符串以产生输出。
一些例子:
var stringValue = "1000";
这会将字符串转换为数字
var numericValue = +stringValue;
这将使它再次成为字符串
var stringAgain = "" + numericValue ;
答案 3 :(得分:0)
我会先使用一元加运算符将它们转换为数字。
+num1 + +num2;
答案 4 :(得分:0)
这主要是由于运营商优先级
-
和+
具有相同的优先级,它们执行从右到左的顺序,因此,如果您保留* or /
,它可以正常工作,因为它们具有高优先级
在java script
中,算术运算符基于operands
执行,这就是执行连接的原因。
所以,如果你附上算术的运算,则括号()
它们先得到高位并先执行,然后执行nex ......
所以,试试这个
alert("diference " + (theNumber-theNumber))
点击here了解详情