nkvnkv
nkvnkv

Reputation: 954

javascript if fails

I do not see where my error is, If there is any

<!DOCTYPE html> <html> <head>
        <script type="text/javascript">
            //http://stackoverflow.com/questions/10251149/using-javascript-to-detect-google-chrome-to-switch-css
            //provera brosera
            function check_chrome_ua() {
                var ua = navigator.userAgent.toLowerCase();
                var is_chrome = /chrome/.test(ua);
                alert("func check_chrome_ua() " + is_chrome);
                return is_chrome;
            }
            //promena nadpisa
            function check() {
                //alert("check1");

                var check = check_chrome_ua();
                alert("var check " + check + "; func check_chrome_ua() " + check_chrome_ua());

                if (check == "false") {
                    alert("change text");
                    document.getElementById("opomena").style.color = "red";
                    document.getElementById("opomena").innerHTML = 'Warning you are not using Google Chrome';
                }
            }
        </script>
        </head>
        <body onmousemove="check()">
    <div id="opomena">Thank you for using Google Chrome.</div>

</body>
 </html>

Popups on Google Chrome popup says true, on Firefox says false popup "change text" does not display in Firefox tho var check is false.

Thank you in advance for advice

Upvotes: 1

Views: 1545

Answers (2)

ixx
ixx

Reputation: 32273

You have to check for boolean value false, not "false" (it's a string).

Only if (!check) would be enough (or more verbose version if (check == false) ).

Upvotes: 1

Mike Samuel
Mike Samuel

Reputation: 120506

Change

if (check == "false") {

to

if (!check) {

or

if (check == false) {

if you really want to check for the boolean value, false.

The regexp, test method which you call at /chrome/.test(ua) returns a boolean, but check == "false" is comparing that boolean to a string. The two are not equal.

In JavaScript, == is permissive when it comes to comparing strings to objects, but not as permissive as Perl's eq operator.

  • 0 == false
  • false == false
  • "false" == [false]
  • false != "false"
  • 0 != "false"

It's a good habit to try and use !== and === which are well-defined operators to compare primitive values.

Upvotes: 4

Related Questions