Почему я получаю разные булевы результаты, когда они должны быть одинаковыми? - PullRequest
2 голосов
/ 28 января 2020

Почему я получаю разные результаты, когда результаты должны быть одинаковыми?

    let isPasswordValid = password => {
  if (!password.length <= 7) {
    return true;
  }
};

console.log(isPasswordValid("rondellallard"));  //true
console.log(isPasswordValid("passwordwfwfw"));  //true
console.log(isPasswordValid("ronde"));          //true
console.log(isPasswordValid("rondelltgh"));     //true
console.log(isPasswordValid("ronde42425"));     //true   

// Кодовая страница 2

  let isPasswordValid = password => {
  if (password.length >= 7) {
    return true;
  }
};

console.log(isPasswordValid("rondellallard")); //true
console.log(isPasswordValid("passwordwfwfw")); //true
console.log(isPasswordValid("ronde")); //undefined
console.log(isPasswordValid("rondelltgh")); //true
console.log(isPasswordValid("ronde42425")); //true

Когда я переворачиваю знаки «больше» и «меньше», я считаю, что все равно должен получить те же значения. Но когда я это делаю, это не тот результат, который я получаю. 3-е значение, которое в этом примере всегда должно быть неопределенным, в первом примере оказывается tre, и я не понимаю, почему.

1 Ответ

4 голосов
/ 28 января 2020

Поскольку здесь имеет значение порядок операций (который определяется приоритетом оператора ). С вашим первым оператором if:

if(!password.length <= 7)

ваш password.length преобразуется в логическое значение благодаря оператору !. Затем, поскольку это логическое значение используется в контексте неравенства, оно будет преобразовано в число, где true становится 1, а false становится 0. Таким образом, ваше if условие всегда будет оцениваться как true как 0/1 <= 7.

Во втором операторе if, однако,

if (password.length >= 7) {

вы фактически проверяете длину строка. Ваша функция будет return true, если длина вашего пароля 7 или больше. Однако вы не определили, что делать, если это не так, поэтому по умолчанию ваша функция будет возвращать undefined неявно.

...