未捕获的TypeError:无法读取对象未定义的属性'indexOf'

时间:2018-09-05 21:31:19

标签: javascript

首先,我不是前端开发人员,并且我对JavaScript不太了解,所以请耐心等待,我将不胜感激,但我需要解决此“典型”错误,但我在Google中找不到stackoverflow的解决方法,可以说在代码中以某种方式起作用,但是在当前解决方案之前是这样的:

在正确的地方,但不是说“漂亮”,所以我正在尝试重构此代码以使其更简洁,更简单

if (
      Object.values(this.searchParams.data)[0] === 'price_desc' ||
      Object.values(this.searchParams.data)[0] === 'price_asc'
    ) {
      // Do nothing
    } else if (!this.searchParams.data.price) {
      this.getProducts();
    }

与此:

考虑到它是{sortBy: "price_asc"}{sortBy: "price_desc"}之类的对象

它在终端中显示:

object

但是我们在无法使用this.searchSortBy.includes()的地方使用ES5,因为它无法正常工作

这是我的代码:

var SponsoredProducts = (function() {
  function SponsoredProducts(
    this.searchParams = window.getSearch();

    this.searchSortBy = Object.values(this.searchParams.data)[0];

    console.log(this.searchParams.data.sortBy);
    console.log('-----------------------');
    console.log(this.searchSortBy);
    console.log('-----------1-----------');
    console.log(typeof this.searchSortBy.indexOf('price') === undefined);
    console.log('-----------2-----------');
    console.log(this.searchSortBy.indexOf('price') === "undefined");
    console.log('-----------3-----------');
    console.log(typeof this.searchSortBy.indexOf('price') == 
    if (!this.searchParams.data.price &&  String(this.searchSortBy).indexOf('price') == "-1") {
      this.getProducts();
    }

  }

但是我经常遇到这样的问题:错误是:未捕获的TypeError:无法读取未定义的属性'indexOf'

因此有适当的解决方案吗?如果有人可以帮助我,我将非常感激。

1 个答案:

答案 0 :(得分:1)

找到了解决方案:

之所以不起作用,是因为我没有定义该值何时为空/未定义,所以我添加了|| ''来创建某些内容,甚至是空的,因此indexOf可以检查某些内容返回-1

this.searchSortBy = this.searchParams.data.sortBy || '';

 if (
   !this.searchParams.data.price &&
   this.searchSortBy.indexOf('price') < 0
 ) {
   this.getProducts();
 }