JSにおけるtrueとfalseの判断


概要
jsを勉強したり使ったりするときのtrueやfalseの判断はいつも葛藤していますが、次はまとめます.JSは弱いタイプの言語に属し、これはある程度便利さを提供し、同時に理解に障害を加えた.その中で「===」と「=====」はその一つであり、「===」は値の等しいことだけを重視し、「====」は値とタイプが等しいことを重視し、具体的には下の例を見る.
一:"==="と"==="
                            var a;
                 1:           if (a == null) {
                                document.write("null==" + a);
                            }
                 2:           if (a == undefined) {
                                document.write("undefined==" + a);
                            }
                 3:           if (a === null) {
                                document.write("null===" + a);
                            }
                 4:           if (a === undefined) {
                                document.write("undefined===" + a);
                            }

この例では、初期化されていない「a」を直接定義します.この場合、出力される値はundefinedである必要があります.jsではnullもundefinedもないという意味で、側面の重点が違うだけです.1:「==」を用いて両者の数値関係を比較し,nullとundefinedは同じ意味「なし」を表すため,すなわち値はいずれも「なし」であり,ここで「a=null」はtrueである.
2:「==」を用いて両者の数値関係を比較し,aの出力値自体がundefinedであるため,ここでの「a=undefined」はtrueに違いない.
3:「====」を用いて両者の数値とタイプの関係を比較し、nullは一般的に時objectタイプを対象とするが、ここでのaはnullとundefinedと数値的に一致するが、彼のタイプは確定していないが、この不確定な対応する値は「undefined」であり、objectとundefinedは明らかに同じタイプではないため、「===」は値的に等しい.ただし、タイプは等しくないので、「a==null」はfalseです.
4:“====”を用いて両者の数値とタイプの関係を比較すると、aの出力値自体が“undefined”であり、またタイプが未定であることに注意し、“タイプ未定”自体が一種のタイプであることに注意し、通常の色“無色”のように、無色自身も一種の色であり、JSという未定タイプのフラグは一時的に“undefined”で理解することができる.したがって「a==undefined」はtrueである.
二:変数をifの直接判断条件とする
 var a,b=-1,c= 1,d= 0,e=null,f=undefined,g='',h="",i = false,j=true,k=[],l={};
                            if (a) {
                              document.write("as is true
"); }else{ document.write("a is false
"); } if (b) { document.write("b is true
"); }else{ document.write("b is false
"); } if (c) { document.write("c is true
"); }else{ document.write("c is false
"); } if (d) { document.write("d is true
"); }else{ document.write("d is false
"); } if (e) { document.write("e is true
"); }else{ document.write("e is false
"); } if (f) { document.write("f is true
"); }else{ document.write("f is false
"); } if (g) { document.write("g is true
"); }else{ document.write("g is false
"); } if (h) { document.write("h is true
"); }else{ document.write("h is false
"); } if (i) { document.write("i is true
"); }else{ document.write("i is false
"); } if (j) { document.write("j is true
"); }else{ document.write("j is false
"); } if (k) { document.write("k is true
"); }else{ document.write("k is false
"); } if (l) { document.write("l is true
"); }else{ document.write("l is falsse
"); } if (NaN) { document.write("NaN is true
"); }else{ document.write("NaN is false
"); } document.write("m "+m); if (m) { document.write("m is true
"); }else{ document.write("m is false
"); }

出力値
a is false
b is true
c is true
d is false
e is false
f is false
g is false
h is false
i is false
j is true
k is true
l is true
NaN is false

特に注意:明らかにmは出力されておらず、mはvarで定義されていない.この場合、mを変数として付与するとグローバル変数として扱われるが、直接出力対象または判断対象とするとjsがエラーを報告し、jsはエラーを報告した場合に実行を停止する.
結果解析:出力結果から,1変数の値が",’,0,undefined,null,false,またはNaNの場合,ifの判断条件としてfalseとして扱われ,他はtrue,特に変数が対象の場合,この対象変数の値がnullでない限りtrueであることが分かった.
三:変数はBooleanと同時にif判断条件とする