【问题标题】:Javascript Integer interpreted as a string?Javascript整数解释为字符串?
【发布时间】:2016-09-17 20:18:07
【问题描述】:
var air = ITC.ITC.hotel.options.option[itc].packages.package[i].airfare - 1;
var opt = ITC.ITC.hotel.options.option[itc].packages.package[i].option - 1;  

console.log((air+1)); // Display 1 in console
console.log((opt+1)); // Display 7 inconsole
detailHtml += '<button class="btn btn-primary btn-lg nav-book" type="button" onclick="book_package(\''+ITC.sid+'\' , '+ITC.ITC.hotel.orig_hot_num_xsl+' , \''+(itc+1)+'\' , '+(package_idx+1)+' , '+(air+1)+' , '+(opt+1)+');">'+lang['book']+'</button>';

当我检查元素时,函数 book_package 的最后两个参数是整数 01 和 61,但是当我在控制台中执行 air+1 和 opt+1 时,我得到 1 和 7 ...

<button class="btn btn-primary btn-lg nav-book" type="button" onclick="book_package('3dd57f6c9e133553378e11d7521ab1be1463751663', 1, '1,3', 7, 01, 61);">Book Now</button>

编辑 2

我也试过

var air = parseInt(ITC.ITC.hotel.options.option[itc].packages.package[i].airfare) - 1;
var opt = parseInt(ITC.ITC.hotel.options.option[itc].packages.package[i].option) - 1; 

'+(parseInt(air+1))+' , '+(parseInt(opt+1))+'

我清除了浏览器缓存,以防万一,我仍然遇到同样的问题

编辑 3

新尝试,还是一样的问题...

'+(1 + parseInt(air , 10))+' , '+(1 + parseInt(opt , 10))+'

【问题讨论】:

  • 当然是。这是javascript
  • 什么是空气,什么是选择?
  • 我添加了空气并选择了操作
  • 你应该给出简化的例子。这是相当可怕的阅读。我经常发现,当我制作简化示例时,我首先意识到自己做错了什么。
  • (+air+1)(1+air) 都会解决这个问题。

标签: javascript string integer


【解决方案1】:

仔细检查您的空气数据类型并选择。

检查一下,看看第一个警报如何将空气作为数字,第二个警报如何将其作为字符串:plnkr.co/edit/4Ll6juBC3BEu1MgdUhjx?p=preview

【讨论】:

    【解决方案2】:

    detailHtml += '&lt;button...,您从一个字符串开始......这使得 JS 将所​​有内容解释为字符串连接,而在其他代码片段中,您没有任何字符串可以搞砸!

    解决方案:

      detailHtml +=     '<button class="btn btn-primary btn-lg nav-book" type="button" onclick="book_package(\''+ITC.sid+'\' , '+ITC.ITC.hotel.orig_hot_num_xsl+' , \''+parseInt(itc+1)+'\' , '+parseInt(package_idx+1)+' , '+parseInt(air+1)+' , '+parseInt(opt+1)+');">'+lang['book']+'</button>';
    

    var a = 1, b = 6;
    
    var r = 'Result';
    
    r += ': ' + parseInt(a+1) + ', ' + parseInt(b+1);
    
    document.body.innerHTML = r;

    【讨论】:

    • 是的,但是添加是用大括号完成的。它不是先执行它们,没有字符串那么普通的数学,然后连接值吗?还是初始字符串的存在会覆盖它?
    • 存在初始字符串覆盖那个
    • 我的意思不是特定于 JS,但对于简单的方程式,我一直认为大括号是首先执行的。刚刚做了一个快速的小提琴和你的权利。很惊讶我过去从来没有这样做过,所以现在才发现!
    • 这真的有点奇怪......在programmers.stackexchange.com/questions/90203/…阅读更多关于它的信息
    • 我试过这个解决方案 '+parseInt(air+1)+' , '+parseInt(opt+1)+' 但我仍然得到 01 和 06。我什至试图清除浏览器缓存,只是万一……
    【解决方案3】:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-23
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    • 2019-05-18
    • 2012-08-24
    • 1970-01-01
    相关资源
    最近更新 更多