有人可以从Browserstack解释这个JavaScript循环吗?

时间:2016-12-20 11:02:22

标签: javascript browserstack

我使用BrowserStack来运行我的测试自动化 - 他们的网站上有一个配置示例来设置“commonCapabilities”。

我知道这是基本的JS,但是这个for循环中双管的用途是什么?

// Code to support common capabilities
exports.config.multiCapabilities.forEach(function(caps){
  for(var i in exports.config.commonCapabilities) caps[i] = caps[i] || exports.config.commonCapabilities[i];
});

完整配置:

https://www.browserstack.com/automate/protractor

exports.config = {
  'seleniumAddress': 'http://hub-cloud.browserstack.com/wd/hub',

  'commonCapabilities': {
    'browserstack.user': 'xxxx',
    'browserstack.key': 'xxxx'
  },

  'multiCapabilities': [{
    'browserName': 'Chrome'
  },{
    'browserName': 'Safari'
  },{
    'browserName': 'Firefox'
  },{
    'browserName': 'IE'
  }]
};

// Code to support common capabilities
exports.config.multiCapabilities.forEach(function(caps){
  for(var i in exports.config.commonCapabilities) caps[i] = caps[i] || exports.config.commonCapabilities[i];
});

2 个答案:

答案 0 :(得分:0)

这是一个更容易阅读的表达式:

for(var i in exports.config.commonCapabilities) {
  caps[i] = (caps[i] || exports.config.commonCapabilities[i]);
}

这意味着如果可以转换为true,则返回caps[i];否则,返回exports.config.commonCapabilities[i]。如果caps[i]未定义,因为这是一个假值,它会将变量设置为exports.config.commonCapabilities[i]。这是确定每个定义的方法,否则回退到某个标准配置。

答案 1 :(得分:0)

这一部分:caps[i] = caps[i] || exports.config.commonCapabilities[i]基本上表示如果caps[i]未定义(或null,false,0,NaN,“”(不是假值)),则运行caps[i] = exports.config.commonCapabilities[i]。< / p>

例如:

var x = x || "value"

具有与

相同的功能
if(x){/*nothing as it is already assigned*/} else {x = "value"}
  

如果第一个值为false,则检查第二个值。如果是,则返回true,如果为false,则返回false。   如果第一个值为true,则无论第二个值是什么,它总是返回true。来自here