Почему count равно 5?

258
10 января 2018, 19:54

Почему count равно 5?
Когда card === 2, 3, 4, 5, 6 к count надо прибавить +1
Когда card === 7, 8 , 9 к count = 0
Когда card === 10, 'J', 'Q', 'K', 'A' - count - 1

Как правильно решить задачу?

var count = 0; 
 
function cc(card) { 
  if (card === 2 || 3 || 4 || 5 || 6) { 
    count++; 
  } else if (card === 10 || "J" || "Q" || "K" || "A") { 
    count--; 
  } 
 
} 
cc(2); 
cc(3); 
cc(7); 
cc('K'); 
cc('A'); 
console.log(count);

Answer 1

Потому что вы неправильно сделали сравнение. Дело в том, что ваше выражение эквивалентно if (card === 2 || true || true || true || true ) что эквивалентно if(true). Так как 3,4,5,6 при логических операциях это true.

То есть у вас всегда срабатывал первый блок if.

Правильная версия кода:

var count = 0; 
 
function cc(card) { 
  if (card === 2 || card === 3 || card === 4 || card === 5 || card === 6) { 
    count++; 
  } else if (card === 10 || card === "J" || card === "Q" || card === "K" || card === "A") { 
    count--; 
  } 
 
} 
cc(2); 
cc(3); 
cc(7); 
cc('K'); 
cc('A'); 
console.log(count);

Answer 2

Потому, что все что не 0 - это true. Условия нужно записывать полностью

var count = 0; 
 
function cc(card) { 
  if ( 
    card === 2 || 
    card === 3 || 
    card === 4 || 
    card === 5 || 
    card === 6 
  ) { 
    count++; 
  } else if ( 
    card === 10 || 
    card === "J" || 
    card === "Q" || 
    card === "K" || 
    card === "A" 
  ) { 
    count--; 
  } 
 
} 
cc(2); 
cc(3); 
cc(7); 
cc('K'); 
cc('A'); 
console.log(count);

Answer 3

card === 2 || 3 || 4 || 5 || 6 - это работать у вас не будет, так как если в card === 2 вы получите false, то потом при любых раскладах false || 3 будет выдавать true, так как !!3 === true

var count = 0; 
 
function cc(card) { 
  if ([2, 3, 4, 5, 6].indexOf(card) >= 0){ 
    count ++; 
  } else if([10, "J", "Q", "K", "A"].indexOf(card) >= 0){ 
    count --; 
  } 
 
} 
cc(2); cc(3); cc(7); cc('K'); cc('A'); 
console.log(count);

Answer 4

тоже самое, просто наглядный вариант

var count = 0; 
 
function cc(card) { 
  switch (card){ 
    case 2: 
    case 3: 
    case 4: 
    case 5: 
    case 6: 
      count++; 
      break; 
    case 10:   
    case "J": 
    case "Q": 
    case "K": 
    case "A": 
      count--; 
      break; 
  } 
} 
 
cc(2); 
cc(3); 
cc(7); 
cc('K'); 
cc('A'); 
console.log(count);

READ ALSO
Почему 0 <= 0 возвращает false?

Почему 0 <= 0 возвращает false?

Почему card <= 0 возвращает false? var count = 0;

227
Можно ли задать имя свойства объекта переменной ?(js)

Можно ли задать имя свойства объекта переменной ?(js)

Допустим у меня есть переменные field, value и объект form :

229
Как подключить jQuery и Bootstrap используя ES6(Babel)?

Как подключить jQuery и Bootstrap используя ES6(Babel)?

Я хочу подключить jQuery и Twitter Bootstrap к файлу используя babel

224
Сокет на PHP. Простой пример

Сокет на PHP. Простой пример

Всем приветМожете показать простой робочей сокет на пхп

266