为什么NaN在Javascript中出现简单的减法?

时间:2015-03-23 10:31:59

标签: javascript

当我这样做时,我遇到了这个问题:

var y;
var x;

function move(e) {
var x=e.x;
var y=e.y;
}

var a=y-600;
alert(a);

当我这样做时,输出是:

a=NaN

7 个答案:

答案 0 :(得分:3)

var a=undefined-600会产生NaN

因为y未分配任何内容undefined,从中减去600会给您NaN(not a number)

看来你需要一个Asign "y" some value,之后你会在move()中找到它的内容

更新@Jits评论:此外,move()函数有x,y作为局部变量,它们不会影响全局x,y

答案 1 :(得分:1)

函数move(e)永远不会在您的代码段中调用,因此变量y不会从其初始值undefined更改。

此外,在函数move(e)的范围内,您声明了一个新的局部变量var y,它覆盖了全局范围中的var y。这意味着局部变量y已更改,全局变量y保持undefined

undefined - 600NaN

Try this snippet

var y;
var x;

function move(e) {
    x=e.x;  // manipulate the variables from the surrounding scope,
    y=e.y;  // instead of creating new, local variables
}

move({x:700, y:700}); // actually call the move function

var a=y-600;
alert(a); // should output "100"

答案 2 :(得分:0)

函数move(e)与此代码无关,因为您没有在任何地方使用它。

至于NaN的原因,你是从已声明但未赋值的变量中减去600.

答案 3 :(得分:0)

简单,你的x和y未定义。

var y; //undefined
var x; //undefined

刚刚定义了x和y,它应该可以工作

FIDDLER DEMO

答案 4 :(得分:0)

您在x中声明了新的本地变量ymove,并且需要初始化包含属性e的某些值的对象xy,用于更新外部变量。你应该重新考虑逻辑,但这将有效:

var y;
var x;

function move(e) {
    x=e.x;
    y=e.y;
}

var e = {x: 1000, y:700};
move(e);

var a = y-600;
console.log(a); // 100

Demo

答案 5 :(得分:0)

首先,你在这里创建了两种变量,这有点令人困惑,而不是一个很好的练习!

  1. 全局变量x& y

  2. 局部变量x& y内部功能移动(e)

  3. 尽量避免这种情况,因为随着代码的增长,它变得难以管理。 来到你的问题全局变量y被声明并且没有初始化,这意味着浏览器引擎在解析时不知道分配给y的内容,因此它将undefined设置为此变量,因此对此变量的计算将是NaN(不是数字) 。并且必须在某处调用函数move(e)来执行函数中包含的任务。

答案 6 :(得分:-1)

y未定义,因此无法计算y-600。