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();
}
[...]
}
我正在使用 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();
}
[...]
}