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