这是一个功能:
function() {
// if on wordpress site decipher if English or Français by using url path
var lang = '';
var wp_path = document.location.pathname.match(/^\/(en|fr)\//)[0];
if (wp_path == "/en/") {
lang = "Français";}
else if (wp_path == "/fr/") {
lang = "English";
}
// if on ruby site decipher if English or Français by using querySelector on element
var ruby_lang = document.querySelector('.menu--primary a[href*="lang="]').textContent.trim();
// either lang or ruby_lang will be null, assign value to opp_language accordingly
var opp_language = lang || ruby_lang;
return opp_language;
}
在Chrome JS控制台中,如果我逐行输入,则可以正常工作:
E.g。在网址http://www.example.com/en/
var lang = '';
var wp_path = document.location.pathname.match(/^\/(en|fr)\//)[0];
if (wp_path == "/en/") {
lang = "Français";} // yes NOT English, it's opposite
else if (wp_path == "/fr/") {
lang = "English";
}
按预期返回Français。
然后,当我在没有包含en或fr的url路径的页面上时,我知道变量“ruby_lang”将返回English或Français。我已经验证了该功能的第二部分可以在控制台中使用。
所以第三部分可能就是问题所在。我的期望是,在这一点上,lang或ruby_lang都设置为真值。所以:
// either lang or ruby_lang will be null, assign value to opp_language accordingly
var opp_language = lang || ruby_lang;
但相反,每当我运行此功能时,opp_language都是未定义的。
双栏是否||语法的表现方式与我理解的不同?
答案 0 :(得分:0)
如果在此行var opp_language = lang || ruby_lang;
之后您的变量app_language
为undefined
,则表示lang
和ruby_lang
评估为false。如果"合并系列中的所有值"如果计算结果为false,表达式将返回列表中的最后一个值。
如果你现在直接输入你的控制台var a = b || c
b
和c
undefined
,然后登录a
你会看到它确实是undefined
。
当document.querySelector()
ruby_language
找不到某个元素时,null
将undefined
或undefined
,如果您获得ActivityB
,则很可能是String gender = getIntent().getStringExtra("gender");
。
因此,基本上要确保您的变量已初始化并且默认值不会被评估为false,我猜。
答案 1 :(得分:0)
我得到了这个工作,但我真的不明白。我使用过以前从未使用过的try和catch。根据我的理解,如果变量无法设置,那么它们只会是假的吗?
无论如何,这有效:
function() {
// if on wordpress site decipher if English or Français by using url path
var lang = '';
try {
var wp_path = document.location.pathname.match(/^\/(en|fr)\//)[0];
if (wp_path == "/en/") {
lang = "Français";}
else if (wp_path == "/fr/") {
lang = "English";
}
} catch (e) {
lang = false;
}
// if on ruby site decipher if English or Français by using querySelector on element
try {
var ruby_lang = document.querySelector('.menu--primary a[href*="lang="]').textContent.trim();
}
catch (e) {
var ruby_lang = false;
}
// either lang or ruby_lang will be null, assign value to opp_language accordingly
var opp_language = lang || ruby_lang;
return opp_language;
}