Javascript 错误类型错误:无法读取属性';toLowerCase';未定义的。离子3

Javascript 错误类型错误:无法读取属性';toLowerCase';未定义的。离子3,javascript,ionic-framework,ionic3,Javascript,Ionic Framework,Ionic3,我正在尝试使用angular从firebase数据库中筛选数据。但它会保留如下错误类型错误:无法读取未定义的属性“toLowerCase”。有人可以帮助我吗?下面是我在search.ts中的函数 searchuser(searchbar) { this.filteredusers = this.temparr; var q = searchbar.target.value; if (q.trim() == '') { return; } this.filteredusers = th

我正在尝试使用angular从firebase数据库中筛选数据。但它会保留如下错误类型错误:无法读取未定义的属性“toLowerCase”。有人可以帮助我吗?下面是我在search.ts中的函数

searchuser(searchbar) {


this.filteredusers = this.temparr;
var q = searchbar.target.value;

if (q.trim() == '') {
  return;
}

this.filteredusers = this.filteredusers.filter((v) => {
  if (v.displayName.toLowerCase().indexOf(q.toLowerCase()) > -1 || v.subject.toLowerCase().indexOf(q.toLowerCase()) > -1) {
    return true;
  }

  return false;
})}
下面是我的html代码

<ion-content padding>
    <ion-searchbar [(ngModel)]="searchstring" (input)="searchuser($event)" placeholder="Search"></ion-searchbar>
    <ion-list no-lines>
      <ion-list>
        <ion-item-sliding *ngFor="let key of filteredusers" >
          <ion-item >
            <ion-avatar item-left>
              <img src="{{key.photoURL}}">
            </ion-avatar>
            <h2>{{key.displayName}} </h2>
            <p>Rate/Hour:RM{{key.rate}}</p>
            <p>Subject:{{key.subject}}</p>
            <p>Distance:0.5KM</p>

          </ion-item>


          <ion-item-options slide="left">
            <button ion-button color="primary" (click)="call(key)">
              <ion-icon name="call"></ion-icon>
              Call
            </button>
          </ion-item-options>

        </ion-item-sliding>
      </ion-list>
    </ion-list>

</ion-content>

{{key.displayName}
速率/小时:RM{{key.Rate}

主题:{key.Subject}

距离:0.5公里

呼叫

我预期的筛选结果是搜索功能可以从数据库中筛选姓名和主题。

将您的条件检查更新为:

if (v.displayName && v.displayName.toLowerCase()...
如果试图调用方法(在本例中为
toLowerCase
)或访问
null
未定义的对象上的属性,通常会出现该错误。这本质上是Javascript版本的
null引用异常

通过选中
v.displayName
可以确保对象
v
上存在属性
displayName
,并且其值不
未定义
null

如果
displayName
属性可能是
string
以外的任何类型,那么在调用属性上的
toLowerCase
之前,您还可以通过类型检查来获益。您可以使用v.displayName==“string”
的类型检查。因此,更完整的检查是:

if (v.displayName && typeof v.displayName === "string" && v.displayName.toLowerCase()...

尝试更新您的cordova

sudo npm install cordova@latest

问题:无法读取未定义的属性“toLowerCase”
最后解决这个问题。这可能会对其他人有所帮助,因为xcode更新非常新,并且没有太多关于这方面的信息。 我使用的是iOS平台v4.5.4。显然,xcode 11与文件列表仿真器构建目标中的验证存在一些冲突。 您必须做的是:
从Cordova删除ios平台
命令
爱奥尼亚cordova平台rm ios

命令:
爱奥尼亚科尔多瓦平台添加ios@latest

科尔多瓦平台添加ios@latest

这将安装iOSV5.0.1,它与xcode 11配合得很好

ERROR TypeError: Cannot read property 'toLowerCase' of undefined.
那些在ionic 3中面临这一问题的人,而ios版则是

只需删除平台ios,然后添加
ios@latest
平台

sudo ionic cordova platform rm ios
sudo ionic cordova platform add ios@latest

这是错误

this.filteredusers = this.filteredusers.filter((v) => {
  if (v.displayName.toLowerCase().indexOf(q.toLowerCase()) > -1 || v.subject.toLowerCase().indexOf(q.toLowerCase()) > -1) {
    return true;
  }

  return false;
})}
'q'更改为'v'

  this.filteredusers = this.filteredusers.filter((v) => {
      if (v.displayName.toLowerCase().indexOf(v.toLowerCase()) > -1 || v.subject.toLowerCase().indexOf(v.toLowerCase()) > -1) {
        return true;
      }

      return false;
    })}

v
保证有哪些属性?如果你把它记录下来,它有什么?@akmalsharif酷!我只是把答案扩大了一点。如果有帮助,请随意投票并标记为接受答案。
  this.filteredusers = this.filteredusers.filter((v) => {
      if (v.displayName.toLowerCase().indexOf(v.toLowerCase()) > -1 || v.subject.toLowerCase().indexOf(v.toLowerCase()) > -1) {
        return true;
      }

      return false;
    })}