解释Javascript中数字的行为
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
//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);将细分为:
console.log(NaN - 5);
有趣的事实:console.log(NaN-NaN);//也是楠
这次:
这主要是由于运算符优先级
-
和+
具有相同的优先级,它们执行从右到左的顺序,因此如果您保持*或/
中的任何一个,都可以正常工作,因为它们具有较高的优先级
在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))