【问题标题】:Javascript > operator not working in ExtensionJavascript > 运算符在扩展中不起作用
【发布时间】:2014-10-19 09:42:13
【问题描述】:

我只是想在循环中使用这个 If 语句,但由于某种原因我无法弄清楚它不起作用

chrome.storage.sync.get({
    probeAmount: '1'
}, function(items) {
    probeavailable = document.getElementById("probeValue").innerHTML;
    console.log(probeavailable);
    console.log(items.probeAmount);
    if(probeavailable > items.probeAmount) {
        //code
    }
    else {
        //something else
    }
});

console.log(probeavailable) 记录数字 14console.log(items.probeAmount) 记录数字 3,但 If 语句每次都转发到 else 部分。

有人知道为什么会这样吗?

【问题讨论】:

  • "14" > "3" 返回 false。将其转换为 int。
  • 您确定它们是您认为的数据类型吗?试试typeof probeavailabletypeof items.probeAmount
  • 有什么要提的。 chrome.storage API 与 HTML localStorage 不同,它会即时进行 JSON 转换。因此,对于数值,将其存储为数字更有意义,即{probeAmount: 1}

标签: javascript if-statement google-chrome-extension operators


【解决方案1】:

我的猜测是它们不是 143(数字),它们是 "14""3"(字符串;probeavailable 肯定是这样,但我不知道另一个)。 14 > 3 为真,但 "14" > "3"(字符串比较)为假。尝试在他们每个人前面放一个+ 以强制他们成为数字:

if(+probeavailable > +items.probeAmount) {

...或者如果其中任何一个是用户输入,请使用 parseInt 和适当的基数:

if(parseInt(probeavailable, 10) > parseInt(items.probeAmount, 10)) {

【讨论】:

  • 完美。强迫他们成为一个数字正是我所需要的。我不明白为什么它不起作用,因为以前它工作得很好。我有点笨,不检查它们是否是字符串。谢谢
  • @RicoClark:在某些情况下它们比较正确,但正如您所发现的,并非所有情况都有效。这可能就是它最初看起来“有效”的原因。
【解决方案2】:

使用

if(parseInt(probeavailable) > parseInt(items.probeAmount)) {

改为

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-19
    • 2020-10-22
    • 2021-11-04
    • 2016-05-03
    • 2021-05-13
    • 2014-11-30
    • 2023-03-17
    • 2021-12-29
    相关资源
    最近更新 更多