解释Javascript中数字的行为

解释Javascript中数字的行为,javascript,function,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

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

发生连接是因为它以字符串开头:

alert ( "  sum  " + theNumber + theNumber ) ;
-> "string" + Number + Number = "StringNumberNumber"
从这一点开始,字符串后面的
+
被视为串联运算符,而不是数字加法运算符。如果要避免这种情况,可以将添加内容括在括号中:

alert ( "  sum  " + (theNumber + theNumber) ) ;
-> "String" + (Number + Number) = "StringEvaluatedParenthesis"

因为Javascript不是严格类型化的语言,当它以字符串开头时需要执行强制转换,所以它的数字3被强制转换为字符串,输出是它们的串联。如果您添加括号(数字-数字),它会将这两个作为数字处理,但随后它会将结果转换为字符串以生成输出

一些例子:

var stringValue = "1000";
这将把字符串转换为一个数字

var numericValue = +stringValue; 
这将使它再次成为字符串

var stringAgain = "" + numericValue ;

我会首先使用一元加号运算符将它们转换为数字

+num1 + +num2;
胁迫 在javascript中,如果使用冲突类型对变量进行操作,则解释器会隐式更改(强制)变量类型和操作

运算符优先级与结合性 操作按照

根据这个来源,(…)具有从左到右的关联性,这意味着它从左到右执行操作

So(5+4+6);将细分为:

  • 5+4//返回9
  • 9+6//返回15 答复 你的问题需要你具备以上两个主题的知识。 现在,

    为什么不是0呢

    所以,应用你的新JS能力,想想(…)是如何工作的

    假设数字=3

  • “difference”+theNumber=“difference 3”(将数字强制为字符串)
  • “差3”-数字=NaN string+string在JS中以串联的形式有效,但“-”运算符不适用于字符串,因此再次发生强制转换,将“差3”转换为返回NaN的数字

    console.log(NaN - 5);
    
    有趣的事实:console.log(NaN-NaN);//也是楠


    这次:

  • “sum”+theNumber=“sum 3”
  • “sum 3”+theNumber=“sum 33”

  • 这主要是由于运算符优先级

    -
    +
    具有相同的优先级,它们执行从右到左的顺序,因此如果您保持
    *或/
    中的任何一个,都可以正常工作,因为它们具有较高的优先级

    java脚本中
    基于
    操作数执行算术运算符
    这就是执行串联的原因

    因此,如果将算术运算括在括号中,它们会得到较高的优先级,先执行,然后执行

    所以,像这样试试

    alert("diference " + (theNumber-theNumber))
    

    单击以获取更多信息

    尝试用括号括起
    警报(“总和”+(数字+数字))
    +
    用于连接字符串。就像@jcubic所说的:使用parandessis,它会计算总和。你可以使用
    console.log('difference',theNumber-theNumber)
    而不是
    alert
    s来记录你的结果。这不需要将对象映射到字符串,并且可以防止这些混淆。虽然这不是直接原因,但您应该注意,来自
    prompt()
    的所有内容都是字符串。他使用了
    Number()
    它们已经是数字,这就是
    Number()
    -函数的作用“
    -
    的优先级低于
    +
    ”,不,它们具有相同的优先级。如果
    -
    的优先级较低,那么
    3-2+5
    将是
    -4
    ,但它不是,而是
    6
    。你所谓的优先级实际上是关联性。
    var theNumber = Number ( prompt (" Pick a number " , "") ) ;
    alert ("  sum  " + theNumber + theNumber ) ;// ->3// ->33
    
    alert("diference " + (theNumber-theNumber))