navigator.language 在 app.js 中无法正确识别
navigator.language not recognized correctly in app.js
这是我的控制器
app.controller('languagesCtrl', function($scope) {
var lang = window.navigator.language || window.navigator.userLanguage;
if (lang === 'it' || 'it-it' || 'it-IT') {
$scope.showcase = 'Vetrina';
$scope.products = 'Prodotti';
$scope.cta = 'Nuova collezione strumenti';
} else {
$scope.showcase = 'Showcase';
$scope.products = 'Products';
$scope.cta = 'Check out new products!';
}
});
即使我确定我的 navigator.language 不是 'it-IT'(选中 here),我基于 angular 的网站也不会使用里面的内容在 else 的括号中。
你的表达式永远是真的,就像你使用 ||
运算符的方式。
表达式计算时
第一部分(lang === 'it'
)可能是true
或false
,假设是假的
然后表达式变成像 (false || 'it-it' || 'it-IT')
,它总是 return 去 return 下一个表达式值,在这种情况下它会是 it-it
,所以无论如何如果条件会得到满足。
改成下面。
if (lang === 'it' || lang === 'it-it' || lang === 'it-IT')
或简化事件。
if (['it','it-it','it-IT'].indexOf(lang) > -1)
ES6 完美解决了这个问题
我只是把它放在这里以防将来人们偶然发现它。对 ES6 使用 includes()
。
['it','it-it','it-IT'].includes(language)
ES5解决方案
这些东西总是让我很困惑,直到我意识到,我错误地使用了多个 OR 比较。所以我这样做是为了让它更具可读性。
Array.prototype.contains = function(obj) {
return this.indexOf(obj) > -1;
};
现在,您可以像这样使用它:
var language = $window.navigator.language.
if (['it','it-it','it-IT']].contains(language)) {
alert('yes');
}
这更具可读性。当然,如果你用的是underscore.js,他们还有下面的帮手。
_.contains([], search)
这是我的控制器
app.controller('languagesCtrl', function($scope) {
var lang = window.navigator.language || window.navigator.userLanguage;
if (lang === 'it' || 'it-it' || 'it-IT') {
$scope.showcase = 'Vetrina';
$scope.products = 'Prodotti';
$scope.cta = 'Nuova collezione strumenti';
} else {
$scope.showcase = 'Showcase';
$scope.products = 'Products';
$scope.cta = 'Check out new products!';
}
});
即使我确定我的 navigator.language 不是 'it-IT'(选中 here),我基于 angular 的网站也不会使用里面的内容在 else 的括号中。
你的表达式永远是真的,就像你使用 ||
运算符的方式。
表达式计算时
第一部分(lang === 'it'
)可能是true
或false
,假设是假的
然后表达式变成像 (false || 'it-it' || 'it-IT')
,它总是 return 去 return 下一个表达式值,在这种情况下它会是 it-it
,所以无论如何如果条件会得到满足。
改成下面。
if (lang === 'it' || lang === 'it-it' || lang === 'it-IT')
或简化事件。
if (['it','it-it','it-IT'].indexOf(lang) > -1)
ES6 完美解决了这个问题
我只是把它放在这里以防将来人们偶然发现它。对 ES6 使用 includes()
。
['it','it-it','it-IT'].includes(language)
ES5解决方案
这些东西总是让我很困惑,直到我意识到,我错误地使用了多个 OR 比较。所以我这样做是为了让它更具可读性。
Array.prototype.contains = function(obj) {
return this.indexOf(obj) > -1;
};
现在,您可以像这样使用它:
var language = $window.navigator.language.
if (['it','it-it','it-IT']].contains(language)) {
alert('yes');
}
这更具可读性。当然,如果你用的是underscore.js,他们还有下面的帮手。
_.contains([], search)