Javascript中算术运算符的混淆

Javascript中算术运算符的混淆,javascript,Javascript,虽然我知道下面的问题很简单,但它与我无法通过谷歌找到的具体情况有关。下面的代码是用Javascript编写的 假设有一个变量 x = x + 1; 我可以从一个教程中看出这应该是可行的。但是,我们应该如何在计算中使用此变量 我尝试了以下代码 var name = name + 1; alert(name); 上述输出为“NaN”;不管那是什么 var name = name + 1; name = 2; alert(name); 上述输出2仅覆盖原始变量 name = prompt("in

虽然我知道下面的问题很简单,但它与我无法通过谷歌找到的具体情况有关。下面的代码是用Javascript编写的

假设有一个变量

x = x + 1;
我可以从一个教程中看出这应该是可行的。但是,我们应该如何在计算中使用此变量

我尝试了以下代码

var name = name + 1;
alert(name);
上述输出为“NaN”;不管那是什么

var name = name + 1;
name = 2;
alert(name);
上述输出2仅覆盖原始变量

name = prompt("input any number");
var name = name + 1
alert(name);
上述输入输出+1作为字符串,即01,其中输入为“0”,不带引号


我记得在ruby课程中,我们使用.to_I将字符串转换为整数。我们如何在Javascript中实现这一点?

+
在不同的上下文中意味着不同的事情。如果两个操作数是数字,则它进行加法运算。如果一个操作数是字符串,它会进行字符串串联,因此

var x = "2"; // x is the String "2"
alert(x+2); // "22"

var x = 2; // x is the number 2
alert(x+2); // 4
如果要将字符串转换为数字,可以执行以下操作

if(x)x=parseInt(x,10)

其中第二个参数是基数(即数字系统的基数),您应该使用它。例如,如果有人输入了02,则基数会阻止javascript将其视为八进制(或其他)数字


当然,在使用变量之前,始终需要确保定义了变量。我打赌您的NaN结果来自未定义的变量。

使用
parseInt
将字符串转换为数字

x=x+1
表示“获取
x
的现有值,向其中添加一个,并将结果值再次存储回
x

var name=name+1
没有意义,因为执行语句时
name
没有现有值。这与说
undefined+1
NaN
(不是数字)是一样的

以下是
+
操作符在JavaScript中如何工作的一些示例:

 1  +  2  // number + number is a number -> 3
"1" +  2  // string + anything is a string => "12"
 1  + "2" // anything + string is a string => "12"
"1" + "2" // string + string is a string => "12"

上面的代码声明了一个名为
name
的新变量,该变量包含前面包含的任何
name
,加上1。由于
name
只是刚刚出现,所以它没有数值(“不是数字”或NaN)。将1添加到NaN会得到NaN。

您的问题是您从未初始化名称。例如:

var name = 0;
alert(name); // Name is 0
name = name + 1;
alert(name); // Name is 1
如果你不初始化它,它会给你NaN:不是一个数字

要将字符串转换为数字,请使用
parseInt
parseFloat

var name = prompt("input any number"); // I input 3
name = parseFloat(name);
name = name + 1;
alert(name); // Name is 4
NaN的意思是“不是一个数字”。因为名称在第一次声明时没有值,所以说“var name=name+1”没有数字意义,因为名称在第一次使用时处于声明过程中

在第二个示例中,name被确定为字符串。Javascript不像其他一些语言那样对类型敏感,因此它使用+作为串联运算符,而不是数字运算符,因为它在上下文中更有意义

var name = prompt("input any number"); // I input 3
name = parseFloat(name);
name = name + 1;
alert(name); // Name is 4