以下函数根据浏览器中设置的语言设置框架的语言:
util.setLang = (lang) => {
console.log(lang)
let selectedLang = ''
const english = 'en' || 'en-US' || 'en-UK'
const chinese = 'zh' || 'zh-TW' || 'zh-CN'
if (lang === english) selectedLang = 'en'
if (lang === chinese) selectedLang = 'zh'
Vue.config.lang = selectedLang
}
当console.log(lang)
记录' zh'。有用。 selectedLang
设置为' zh'。当console.log(lang)
记录' zh-Tw' selectedLang
它设置为空字符串。
为什么会这样?
答案 0 :(得分:3)
此
const english = 'en' || 'en-US' || 'en-UK'
const chinese = 'zh' || 'zh-TW' || 'zh-CN'
直接评估
const english = 'en'
const chinese = 'zh'
,下一行取决于lang
if (lang === english) selectedLang = 'en'
if (lang === chinese) selectedLang = 'zh'
虽然english
和chinese
只有一个值,但比较会将此单个值与其竞争,但不会与所有三个值竞争。
更好地使用
const english = ['en', 'en-US', 'en-UK']
const chinese = ['zh', 'zh-TW', 'zh-CN']
使用indexOf方法的数组,并使用
if (english.indexOf(lang) !== -1) selectedLang = 'en'
if (chinese.indexOf(lang) !== -1) selectedLang = 'zh'
答案 1 :(得分:2)
为什么在||中没有以下值?条件正在设定?
因为当你说
时const chinese = 'zh' || 'zh-TW' || 'zh-CN'
只有chinese
为真,才会将zh
设置为Boolean('zh')
。
它不会超过此链中的 zh 。
如果您想确保中文选择应该是'zh', 'zh-TW', 'zh-CN'
之一,那么请将其设为
util.setLang = (lang) => {
console.log(lang)
let selectedLang = ''
const english = ['en','en-US','en-UK'];
const chinese = ['zh','zh-TW','zh-CN'];
if ( english.indexOf(selectedLang) != -1 ) selectedLang = 'en'
if ( chinese.indexOf(selectedLang) != -1 ) selectedLang = 'zh'
Vue.config.lang = selectedLang
}
更通用的解决方案可能是
var constLanguages = [
['en','en-US','en-UK'],
['zh','zh-TW','zh-CN']
];
selectedLang = constLanguages.filter(function(val){
return val.indexOf(selectedLang) != -1;
})[0];
这将确保如果其中一个项目在数组中匹配,则其第一个项目将成为selectedLang
答案 2 :(得分:0)
多数民众赞成是因为字符串 “a”|| “B” 总是等于“a”。
你应该在条件中使用or运算符而不是字符串中的:
if(lang =='a'|| lang =='b')