Javascript数字和NaN

Javascript数字和NaN,javascript,Javascript,我对javascript数字和NaN有“小”问题 我正在通过JSON格式的ajax POST方法检索一个数字 $.post('test.php?a=b', {w: w}, function(json) { desktop.height = desktop.height - json.height * 2; }); 当我尝试乘以它时,它给了我NaN desktop.height = desktop.height - json.height * 2; NaN JSON是一个对象,对吗?所

我对javascript数字和
NaN
有“小”问题

我正在通过JSON格式的ajax POST方法检索一个数字

$.post('test.php?a=b', {w: w}, function(json) {
    desktop.height = desktop.height - json.height * 2;
});
当我尝试乘以它时,它给了我NaN

desktop.height = desktop.height - json.height * 2;
NaN
JSON是一个对象,对吗?所以,当我把它输入firebug/chrome控制台时,它会像预期的那样给出int 0

var a = {}; a.t = 0; a.t * 2;
0
即使我将其输入控制台,它仍然会给我预期的0 int

var a = {}; a.t = "0"; a.t * 2;
0

我的问题是,发生了什么,我该如何解决

当您检索数字时,使用Javascript的
parseInt()
方法解析它们。

这取决于JSON字符串的格式,因此如果它的
{height:}
则是正确的。但它实际上可能是一个字符串,您是否尝试过先将其解析为int

parseInt(...)

无论是
desktop.height
还是
json.height
都是
NaN
如果
Content-Type
头没有从服务器设置为
application/json
,并且仍然希望jQuery自动将json字符串解析为JS对象,那么必须在中添加
dataType
json
$。post
呼叫

$.post('test.php?a=b', {w: w}, function(json) {
    desktop.height = desktop.height - json.height * 2;
  },'json');
或者你必须像这样解析你自己使用的

  $.post('test.php?a=b', {w: w}, function(json) {
     json = $.parseJSON(json);
     desktop.height = desktop.height - json.height * 2;
  });

JSON是Javascript对象的字符串版本。使用JSON.parse(text)从您的帖子中收到的字符串创建一个对象。我不熟悉你的post方法,但我会试试

function(JSON.parse(json)) {
    desktop.height = desktop.height - json.height * 2;
} 

当您检索数字时,请使用JSNumber()method:)解析它们。

您能提供一个完整的测试用例吗?其中包括表达式的输入。
console.log([desktop.height,json])
显示了什么?您需要发布相关的json,以便任何人都能准确地解释这一点。您可以将
console.log()
消息添加到回调函数中,以打印出
typeof desktop.height
typeof json.height
json
仅在以下情况下才是一个对象:(1)服务器使用有效的json字符串进行响应;(2)
Content-Type
标题是
application/json
@airbatd-输入并不重要。因为这将给jQuery带来一些声称是HTML的东西。添加
标题(“内容类型:application/json”)如果您正在输出JSON。如果值首先是数字,则不需要这样做。奇数。让我再看一看。@Quentin我以前有一些数值不是作为整数解析的,而是作为字符串解析的。至少尝试一下这样做是很好的。只有当它是一个由数字和一些非数字字符组成的字符串时,这才有帮助。不,你不需要,如果响应的内容类型设置正确的话。如果服务器已损坏,则只需重写数据类型。添加
'json'
作为第四个参数,即可修复此问题。谢谢你,真的吗?你是怎么测试的?或者您是否查看了PHP并假设上面两个都是数字?