eslint 错误 "guard-for-in" 不清楚如何使用 for-in

eslint error "guard-for-in" not clear how to work with for-in

我正在使用 Cucumber js,我想在应用程序中填写一些字段,所以我正在使用 for-in 从 rowHash 获取数据,但我收到了错误消息 "The body of a for-in should be wrapped in an if statement to filter unwanted properties from the prototype guard-for-in" 我不确定我应该如何使用 for 中的 if 编写我的 for-in。

这是我的代码:

this.fillRequiredfields = function(dataTable){
  var rows = dataTable.rowsHash();
  for (var row in rows) {
    var val = rows[row];

    if (row === 'firstname') {
      element(by.name('firstName')).sendKeys(val).isPresent();
    }
    if (row === 'lastname') {
      element(by.name('lastName')).sendKeys(val).isPresent();
    }
    if (row === 'emailaddress') {
      element(by.name('emailAddress')).sendKeys(val).isPresent();
    }
    if (row === 'displayname') {
      element(by.name('displayName')).sendKeys(val).isPresent();
    }
    if (row === 'password') {
      element(by.name('newPassword')).sendKeys(val).isPresent();
    }
  }
};

因此,当我尝试在 git 中进行提交时,我从 eslint 获得了 "guard-for-in"。如果有人能解释我应该如何做 for-in 中的 if 就更好了。

希望你能帮助我。

我已经解决了这个问题,就我而言,解决方案是:

而不是

var val = rows[row];

我用 hasOwnProperty() 添加 if,如下所示:

if (rows.hasOwnProperty(row))

所以代码是这样的:

for (var row in rows) {
  if (rows.hasOwnProperty(row)){

    if (row === 'firstname') {
      element(by.name('firstName')).sendKeys(rows[row]).isPresent();
    }
    if (row === 'lastname') {
      element(by.name('lastName')).sendKeys(rows[row]).isPresent();
    }
    if (row === 'emailaddress') {
      element(by.name('emailAddress')).sendKeys(rows[row]).isPresent();
    }
    if (row === 'displayname') {
      element(by.name('displayName')).sendKeys(rows[row]).isPresent();
    }
    if (row === 'password') {
      element(by.name('newPassword')).sendKeys(rows[row]).isPresent();
    }
  }
}

希望对其他人有所帮助。

在极少数情况下

if (rows.hasOwnProperty(row))

可能会触发不良影响(例如,如果这是一个函数 hasOwnProperty())。所以这就是为什么建议的方法是

Object.prototype.hasOwnProperty.call(rows, row)

您还可以使用 for...of 语句 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of),这样您的代码将类似于:

for (var row of Object.keys(rows)) {
  if (row === 'firstname') {
    element(by.name('firstName')).sendKeys(rows[row]).isPresent();
  }
  [...]
}