【问题标题】:Javascript object's function returns undefined or always false?Javascript 对象的函数返回未定义或始终为假?
【发布时间】:2018-03-18 14:52:20
【问题描述】:

好的,所以我很确定我是个笨蛋,因为我是 javascript 新手。 试图找到任何东西,但没有。可能是因为我根本不知道我在寻找什么。

我得到了一个填充了不同数据的数组。我认为它们都存储为字符串,因为我从网站搜索的 XMLHttpRequest 中获取它们。

var search = document.getElementById("filter").value;
var xhr = new XMLHttpRequest();
xhr.open('GET', "https://api.soundcloud.com/tracks?client_id=1dff55bf515582dc759594dac5ba46e9&q=" + search, false);
xhr.addEventListener("load", function() {
    var searchString = xhr.response;

    searchArray = searchString.split(",");

然后我尝试将数组的一些数据存储在对象的不同属性中。对于其中一个属性,我尝试检查数组中的两个位置并进行比较。由于某种原因,它不起作用:

track01  = 
{..., usable:function(){if(searchArray[37] === "true" && searchArray[19] === "all"){return true;}else{return false;}}, ...};

这总是返回 false,即使它应该为 true。

我也试过用 == 或不带引号。 (左右两边)

我尝试的另一件事是摆脱 if / else:

track01  = 
{..., usable:function(){searchArray[37] == "true" && searchArray[19] == "all"};

由于某种原因,这总是返回 undefined。

明确一点:searchArray[37] 是一个内容为“true”的字符串,而 searchArray[19] 是一个内容为“all”的字符串。至少在我正在测试的情况下。

我希望这不像我想象的那么愚蠢。

【问题讨论】:

  • searchArray = searchString.split(","); — 你到底在做什么?提示:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • 一般来说,要调试这类问题,您应该console.log(searchArray[37]) 来查看值是什么(提示:它的含义远不止“真”这个词),但如前所述在我之前的评论中,您的整个方法都是错误的。
  • @Quentin 我认为这就是你的做法。搜索结果是一个巨大的字符串,我将它拆分为每个“,”以获得一个大数组,这样我就可以将所有元素逐一调用。除了在 SoundCloud 搜索中分割不同的属性外,没有使用“,”。
  • @Quentin 好的,我是 javascript 新手,愿意学习。我以为我走在正确的道路上。我在做什么大错特错?
  • @Quentin console.log 返回“true”,这是真的。只有这个词,没有别的

标签: javascript function object comparison


【解决方案1】:

@Quentin 的意思是 soundcloud api 返回一个 JSON 对象,您应该这样解析它——而不是通过 split()。

话虽如此,它仍然不能解释你的错误。如果 searchArray[37] 和 searchArray[19] 确实只是字符串“true”和“all”,那么还有其他问题。尝试发布创建 track01 对象的实际代码以及如何使用可用属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-30
    • 2018-08-06
    相关资源
    最近更新 更多