2

虽然我知道以下问题很简单,但它与我无法通过 Google 找到的特定情况有关。以下代码使用 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 中做到这一点?

4

5 回答 5

3

+在不同的语境下有不同的意思。如果两个操作数是数字,那么它会加法。如果一个操作数是一个字符串,它会进行字符串连接,所以

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 结果来自未定义的变量。

于 2012-08-20T20:25:37.083 回答
3
var name = name + 1;

上面的代码声明了一个名为的变量name,它包含之前包含的任何name内容,加上 1。由于name刚刚出现,它没有数值(“非数字”或 NaN)。NaN 加 1 得到 NaN。

于 2012-08-20T20:26:43.923 回答
2

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

var name = 0;
alert(name); // Name is 0
name = name + 1;
alert(name); // Name is 1

如果你不初始化它,它会给你 NaN: Not a Number。

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

var name = prompt("input any number"); // I input 3
name = parseFloat(name);
name = name + 1;
alert(name); // Name is 4
于 2012-08-20T20:27:15.767 回答
1

用于parseInt将字符串转换为数字。

该行x = x + 1表示“取 的现有值x,将其加一,然后将结果值重新存储x”。

该行var name = name + 1没有意义,因为name在执行语句时没有现有值。这与说undefined + 1which is NaN(Not a Number) 相同。

+以下是运算符在 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"
于 2012-08-20T20:26:29.370 回答
0

NaN 的意思是“不是数字”。由于 name 在第一次声明时没有值,所以说“var name = name + 1”没有数字含义,因为 name 在第一次使用时正在被声明。

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

于 2012-08-20T20:28:59.647 回答