2015-04-24 3 views
-4

Почему он не может соответствовать?Почему это невозможно?

var d = $('#bstudylevel').val(); // Bachelor 
    var g = $('#bfrench').val(); // Moedertaal 
    var h = $('#bnederlands').val(); // Moedertaal 

    switch(selected_language) { //NL 
    case 'NL': 
     if(((d!=='Bachelor') || (d!=='Master') || (d!=='Doctoraat')) && 
      ((g!=='Moedertaal') || (g!=='Zeer Goed')) && 
      ((h!=='Moedertaal') || (h!=='Zeer Goed')) 
    ) { 
      console.log("You do not match the requirement: ", d, g, h); 
      return false; 
     } 
     break; 
    case 'FR': 
     if(((d!=='Bachelier') || (d!=='Master') || (d!=='Doctorat')) && 
      ((g!=='Très bon') || (g!=='Bon')) && 
      ((h!=='Très bon') || (h!=='Zeer Goed')) 
    ) { 
     console.log("You do not match the requirement: ", d, g, h); 
     return false; 
     }  
     break; 
    } 

    console.log('Expected output is this..., not above'); 

Выход:

Вы не соответствуют требованиям: Bachelor Moedertaal Moedertaal

+2

'(d! == 'Master')' is 'true'; '(g! == 'Zeer Goed')' is 'true', я думаю, вы можете понять, почему сейчас? – hjpotter92

+2

Реальный вопрос: почему этот вопрос не может понять? –

+0

(d! == 'Бакалавр) || (d! == 'Master') всегда будет истинным для любого значения d –

ответ

5

Потому что в вашем коде d всегда имеет значение, верно:

if (((d !== 'Bachelor') || (d !== 'Master') || (d !== 'Doctoraat')) && ((g !== 'Moedertaal') || (g !== 'Zeer Goed')) && ((h !== 'Moedertaal') || (h !== 'Zeer Goed'))) 

например

d !== 'Master' //true, 
d !== 'Doctoraat' //true 

Одним из решений может быть использовать массив со всеми степенями и использовать Array.prototype.indexOf следующим образом:

var d = 'Bachelor'; 
var g = 'Moedertaal'; 
var h = 'Moedertaal'; 
var degrees = ['Bachelor', 'Master', 'Doctoraat', 'Moedertaal', 'Zeer Goed', 'Moedertaal', 'Zeer Goed']; 

case 'NL': 
    //check if d meet the degrees requirements 
    if (degrees.indexOf(d) !== -1) { 
     console.log("You do not match the requirement: ", d, g, h); 
     return false; 
    } 
break; 
4

В любом выражении, как

((d!=='Bachelier') || (d!=='Master') || (d!=='Doctorat')) 

считают, что d может иметь только одно значение. Следовательно, независимо от того, что d, оно будет не равно одной из этих строк. Это может быть ни один из них, ни один из них, но это не все три.

Следовательно, значение этого будет всегда be true.

2

Не беспокойтесь, мы вам поможем. Я сделал скрипку здесь: https://jsfiddle.net/j9z8xyys/

var d = 'Bachelor'; 
var g = 'Moedertaal'; 
var h = 'Moedertaal'; 
selected_language = 'NL'; 
switch(selected_language) { //NL 
    case 'NL': 
     if(((d!=='Bachelor') || (d!=='Master') || (d!=='Doctoraat')) && 
     ((g!=='Moedertaal') || (g!=='Zeer Goed')) && 
     ((h!=='Moedertaal') || (h!=='Zeer Goed'))) { 
      console.log("A"); 
      return false; 
     } 
     break; 
    case 'FR': 
     if(((d!=='Bachelier') || (d!=='Master') || (d!=='Doctorat')) && 
     ((g!=='Très bon') || (g!=='Bon')) && 
     ((h!=='Très bon') || (h!=='Zeer Goed'))) { 
      console.log("B"); 
      return false; 
     }  
     break; 
    } 
console.log("C"); 

Он заканчивает собирается в первую консоль из только потому, что условие удовлетворяется. Что нужно делать, может быть, это хорошая идея переписать его.

Смежные вопросы