Javascript app.js中未正确识别navigator.language
这是我的控制器Javascript app.js中未正确识别navigator.language,javascript,angularjs,angularjs-scope,operators,Javascript,Angularjs,Angularjs Scope,Operators,这是我的控制器 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'; $s
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”(选中),我的基于角度的网站也不会使用else括号中的内容。你的表达总是正确的,就像你使用的
|操作符一样
表达式求值时
第一部分(lang==='it'
)它可能是true
或false
,假设它是false
然后表达式变得像(false | | | | | | | | | | | | | | | | | | | | | | | | | | | 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']包括(语言)
ES5解决方案
这些东西总是让我着迷,直到我意识到,我使用的是多重或比较错误。所以我这样做是为了让它更具可读性
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');
}
这更具可读性。当然,如果您使用的是underline.js,那么它们有以下帮助程序
\包含([],搜索)
它破坏了控制器,不知何故与我正在使用coffeescript这一事实有关?是的,它可以工作:D坏操作符,我的坏:p将在5分钟内接受,先生!也谢谢你,但我会坚持纠正我错误的比较:D