Разное поведение между == true и! = False - PullRequest
0 голосов
/ 14 апреля 2020

Работая над очень простой c функцией, я весьма озадачен тем, как работает сравнение if.

в конце моего кода (ниже) у меня есть:

if (number == 0) {
        result = unit;
        console.log(result);
    }
    else if (hundred == false && ten == false) {
        result = unit;
    }
    else if (hundred == false && ten != false) {
       result = ten + '-' + unit;

    } 
    return result;

В последнем условии if, если я поставлю 'ten == true', ничего не произойдет, пока он работает как-то нормально с отрицательным сравнением.

В переменной 'ten' содержится строка. Оно не пустое, поэтому оно должно быть истинным (а не ложным). Любая причина, почему это происходит?

function askNumber() {
    var number = parseInt(prompt('Veuillez entrer un nombre entre 0 et 999.'));
    if (isNaN(number)) {
        return askNumber();
    }
    else if (number < 0) {
        alert('Veuillez entrer un nombre supérieur à 0.')
        return askNumber();
    }
    else if (number > 999) {
        alert('Veuillez entrer un nombre inférieur à 999.');
        return askNumber();
    }
    else {
        return number;
    }
}






function numberToLetter() {
    var number = askNumber();
    var units = number % 10;
    var unit = units;
    var tens = number % 100 - units;
    var ten = tens / 10;
    var hundreds = number - (tens + units);
    var hundred = hundreds / 100;
    var result = '';

    switch (unit) {
        case 0: unit = 'zero';
            break;
        case 1: unit = 'un';
            break;
        case 2: unit = 'deux';
            break;
        case 3: unit = 'trois';
            break;
        case 4: unit = 'quatre';
            break;
        case 5: unit = 'cinq';
            break;
        case 6: unit = 'six';
            break;
        case 7: unit = 'sept';
            break;
        case 8: unit = 'huit';
            break;
        case 9: unit = 'neuf';
            break;
    }
    switch (ten) {
        case 1: ten = 'dix';
            break;
        case 2: ten = 'vingt';
            break;
        case 3: ten = 'trente';
            break;
        case 4: ten = 'quarante';
            break;
        case 5: ten = 'cinquante';
            break;
        case 6: ten = 'soixante';
            break;
        case 7: ten = 'soixante-dix';
            break;
        case 8: ten = 'quatre-vingt';
            break;
        case 9: ten = 'quatre-vingt-dix';
            break;
    }
    switch (hundred) {
        case 1: hundred = 'cent';
            break;
        case 2: hundred = 'deux';
            break;
        case 3: hundred = 'trois';
            break;
        case 4: hundred = 'quatre';
            break;
        case 5: hundred = 'cinq';
            break;
        case 6: hundred = 'six';
            break;
        case 7: hundred = 'sept';
            break;
        case 8: hundred = 'huit';
            break;
        case 9: hundred = 'neuf';
            break;
    }
    if ((hundreds / 100) > 1) {
        hundred += '-cent';
    }



    //





    if (number == 0) {
        result = unit;
        console.log(result);
    }
    else if (hundred == false && ten == false) {
        result = unit;
    }
    else if (hundred == false && ten != false) {
       result = ten + '-' + unit;

    } 
    return result;


}



alert(numberToLetter());

Просто введите любое число из 2 цифр (например, == 17). Окно оповещения о выходе пустое. Если вы замените сравнение на «! = False», то это сработает.

На мой взгляд, если это не ложь, то это правда ... Для логического значения может быть только 2 значения.

Что я не получу?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...