在Javascript中解释Numbers的行为

时间:2016-04-28 08:45:37

标签: javascript function

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? 请帮忙!

5 个答案:

答案 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);将细分为:

  1. 5 + 4 //返回9
  2. 9 + 6 //返回15;
  3. 答案

    您的问题需要您了解上述两个主题。 现在,

    var theNumber = Number ( prompt (" Pick a number " , "") ) ;
    alert ("  difference  " + theNumber - theNumber ) ;
    

    差异NaN为什么不是0?

    因此,请使用新的JS功能并思考(...)如何工作。

    假设theNumber = 3;

    1. “difference”+ theNumber =“difference 3”(将数字强制为字符串)
    2. “差异3” - 数字= NaN;
    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
      

      这一次:

      1. “sum”+ theNumber =“sum 3”
      2. “sum 3”+ theNumber =“sum 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了解详情