Javascript号是NaN

时间:2013-04-29 10:17:12

标签: javascript undefined nan

我一直在四处寻找,我似乎无法找出发生这种情况的原因或如何解决这个问题。我已经尝试了大约2天不同的事情,现在是时候先寻求帮助,然后再撕掉我的头发了(我是Java的新手)

我知道这段代码目前很长,但是为了便于阅读,可以看出它为什么不适合我。

     function getBaB()
{   
      var BaB=0;
      var theForm = document.forms["prrform"];
      var basebab = theForm.elements["charbab"];
      BaB = basebab.value;
      return BaB;
}

 var armour_types = new Array();

//这是不起作用的一点

 armour_types["Heavy"] = (getBaB.value) ;

//它只返回undefined,如果我是parseInt,那么我得到NaN。我只是不明白为什么没有定义。

 armour_types["Medium"] = 10;
 armour_types["Light"] = 2;
 armour_types["Adamantine"] = 10;
 armour_types["Mithral"] = 5;
 armour_types["Unarmoured"] = 0;


function calculateTotal()
{
   var TotalPRR = getArmourType();
    var divobj = document.getElementById('totalPRR');
    divobj.style.display='block';
    divobj.innerHTML = "Total PRR "+TotalPRR;

}

function hideTotal()
{
    var divobj = document.getElementById('totalPRR');
    divobj.style.display='none';
}

如果需要,我可以发布HTML。

提前致谢:

3 个答案:

答案 0 :(得分:1)

Kirubhananth Chellam的回答是正确的:

armour_types["Heavy"] = getBaB();

但是,由于你是Javascript的新手(Java有一个非常不同的语法),我会尝试解释你出错的地方,看看我是否可以帮助你。

Javascript是松散的类型 - 这是整个语言的关键。考虑...

var x = 0;

...正如您想象的那样将值0赋给x。简单但是作为任务的关键起点...

x = "hello"

......理解起来并不那么简单。在强类型语言中,这将返回类型错误,但是Javasript,这是完全可以接受的。原样......

x = function(){
    var y = 0;
    return y;
}

...即使已为x分配了数值。

这一点很重要,因为在运行时解释Javascript时,函数声明如...

function x(){
    ...
}

...实际上与变量赋值的解释方式相同......即......

var x = function(){
    ...
}

...如果重载变量x,可能会导致奇怪的行为(请参阅提升http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html)。

回到你的问题,对getBaB.value的调用意味着你正在调用getBaB作为一个赋予一个名为'value'属性的对象的变量。

在您的代码中,Javascript将返回函数定义(在技术上是一个对象)作为值getBaB,它没有'value'属性,因此 undefined

注意:尝试将 undefined 解析为int奇怪地返回NaN(未定义)。

至于你的功能......

  function getBaB()
{   
      var BaB=0;
      var theForm = document.forms["prrform"];
      var basebab = theForm.elements["charbab"];
      BaB = basebab.value;
      return BaB;
}

return BaB不会返回一个对象,尽管你可能认为它确实存在。返回到松散类型的javascript; BaB = basebab.value;表示BaB是指定的数值,而不是具有'value'属性的对象。

有趣的是,如果未找到theForm.elements["charbab"];,则getBaB()仍然可以返回“ undefined ”,如果未在'charbab中设置值,则' null ' '因为它覆盖BaB = 0(松散类型;))。

因此我建议您确保basebab返回一个逻辑值,以确保您的代码使用快速if语句可靠地运行!

希望这会有所帮助。

GW

答案 1 :(得分:0)

你的方法调用是错误的。只需将方法称为methodname();

即可

所以,在你的代码中

  armour_types["Heavy"] = getBaB();

我会猜测。

答案 2 :(得分:0)

首先,getBAB()必须返回一个数组。我的代码示例如下

   function BlockID() {
        var IDs = new Array();
        IDs[0] = "a";
        IDs[1] = "b";
        IDs[2] = "c";
        IDs[3] = "d";
        return IDs;
 }

  var isReady = true;
  function doSaveAs(){
    var armour_types = new Array();
    armour_types["Heavy"] = BlockID();
  }

 <body>
     <input type="button" onClick="doSaveAs();">click</input>
 </body>