无法绕过这个逻辑运算符的行为

时间:2014-08-21 12:40:45

标签: javascript

我正在搞乱一些简单的练习,发现了一些我觉得很奇怪的东西。我写了一个非常简单的HTML表单,当用户输入他们的名字时,如果它是BobAlice,那就太棒了。如果它是另一个名称,它会说I don't know you.所以,我的想法是使用逻辑运算符来比较输入的用户名。这是我的代码:

<h1>This is the practice space</h1>
    <div id="output">
        <label>what is your name?</label>
        <input id="name" type="text">
        <button type="button" onclick="getName()">Send it through!</button>
        <span id="output-name"></span>
    </div>

    <script>
        function getName(){

            var userName = document.getElementById('name').value;

            if(userName === 'Alice' || 'Bob'){
                document.getElementById('output-name').innerHTML = 'Hello ' + userName + '! Glad to have you!';
            } else {
                document.getElementById('output-name').innerHTML = 'I don\'t know you.';
            }
        }
    </script>

对我说“如果userName等于Alice,则为真,如果不是,如果userName等于Bob则为真。如果不是,则{ {1}}事实并非如此。我所进入的一切都是真实的,没有任何东西传递为虚假。任何人都可以对此有所了解吗?

顺便说一下,我仔细阅读MDN上的文档,找出这些逻辑运算符中的逻辑。我想通过我读到的,我的代码应该可以工作。

1 个答案:

答案 0 :(得分:5)

这是因为您没有针对'Bob'检查任何内容。

变化:

if(userName === 'Alice' || 'Bob')

要:

if(userName === 'Alice' || userName === 'Bob')

您当前代码始终返回true的原因是因为字符串(除非为空)为truthy'Bob'评估为true,因此您的if语句完全是在说:如果用户名等于Alice,或者如果这是真的,那么...... if ('Bob')永远都是真的。