JSデータタイプ&演算子&フロー制御文

8556 ワード

JavaScriptはいくつかのデータタイプを定義していますか?どれがオリジナルタイプですか?どれが複雑なタイプですか?元のタイプと複雑なタイプの違いは何ですか?
  • の7種類のデータタイプは、それぞれUnidefined、Null、Boolean、Number、String、Symbol、Objectであり、その中のObjectは複雑なタイプであり、他の6種類は全部シンプルなタイプであり、元のタイプとも呼ばれています.
  • Unidefined:Unidefinedタイプは一つの値、すなわち特殊なundefinedであり、var宣言変数を使用していますが、初期化されていない場合のこの変数の値はundefinedであり、この値を導入するのは空のオブジェクトポインタと初期化されていない変数を区別するためです.
  • Null:Nullも一つの値しかないデータタイプです.この特殊な値はnull、nullは空のオブジェクトポインタを表しています.これはtypeofオペレータを使ってnull値を検出した時に「object」に戻る原因です.
  • Boolean:最も多く使われているタイプは、2つの値true/falseだけで、trueは必ずしも1ではなく、falseも0とは限りません.Boolean変換を実行しています.どのタイプの値に対してもBoolean関数を呼び出すことができます.
  • Number:IEEE 754フォーマットを使用して、整数と浮動小数点の値を表します.
  • String:ゼロ以上の16ビットのユニック文字からなる文字列、すなわち文字列.文字列外の小包は引用符と二重引用符でいいです.
  • Object:ECMAScriptのオブジェクトはデータと機能のセットであり、オブジェクトはnewオペレータの後に作成するオブジェクトタイプの名前を実行することによって作成でき、Objectタイプのインスタンスを作成し、属性および/または方法を追加することによってカスタムオブジェクトを作成することができる.Objectタイプはすべてその実例の基礎です.
  • 違い
  • 基本型変数は値であり、複雑なタイプの変数はメモリアドレスである.
  • 基本タイプは、割り当て時のcopy値であり、複雑なタイプは、割り当て時にcopyアドレスのみであり、copy値ではない.
  • typeofとinstance ofの役割と違い?
  • 作用:
  • typeof:与えられた変数のデータタイプを検出し、演算数のデータタイプを説明する文字列値を返します.typeofは関数ではなくオペレータです.typeofオペレータによって関数と他のオブジェクトを区別する必要があります.戻る値は、string、bollan、number、undefined、object、functionです.
  • instance of:特定の参照タイプの値が具体的にどのタイプのオブジェクトかを判断し、変数が与えられた参照タイプであればtrueに戻り、逆にfalseに戻ります.すべての参照タイプの値はObjectの例であり、instance ofオペレータは参照タイプの値とObjectコンストラクタを検出すると常にtrueに戻り、基本タイプの値を検出すると常にfalseに戻ります.
  • 違い:
  • typeofは、1つの値が文字列、数値、ブール値またはundefinedであるかを決定するために使用され、functionを判断するためにも使用され得るが、オブジェクトタイプの値とnull基本タイプの値を判断するために使用されない.typeofは変数が存在するかどうかを判断するためにも使用できます.
  • instance ofは、参照タイプの値がどのタイプのオブジェクトなのかを決定するために使用されるので、オブジェクトと関数を判断するためにのみ使用されます.
  • どのように変数が数字、文字列、ブール、関数かを判断しますか?
    typeofで操作します.例:
    var s = "dot";
    var b = true;
    var i = 22;
    var u;
    var f = function () {};
    
    alert(typeof s);   //string
    alert(typeof b);   //boolean
    alert(typeof i);   //number
    alert(typeof u);   //undefined
    alert(typeof f);   //function
    
    NaNは何ですか何か特別なところがありますか?
  • NaNは非数値(Not a Number)であり、本来返すべき数値の操作数が数値に戻らない場合を示す特殊な数値です.他のプログラミング言語では、任意の数値を非数値で割るとエラーが発生してコードの実行を停止しますが、ECMAScriptでは、任意の数値を非数値で割るとNaNに戻り、他のコードの実行に影響を与えません.
  • 特別なところ:
  • NaNを含む任意の動作(例えばNaN/10)はNaNに戻り、この特徴は、マルチステップ計算において問題を引き起こす可能性がある.
  • NaNは、NaN自体を含むいかなる値とも等しくない.alert(NaN == NaN); //false
  • のように.
    どのように非数値を数値に変換しますか?
    3つの関数は、変換を実現することができます.Number()——任意のデータタイプのパーパー秒Int()に使用することができます.パーrseFloat()——文字列を数値に変換するのに専用です.
    var num1 = Number("hello world");  //NaN
    var num2 = Number("");  //0
    var num3 = Number("000011");  //11
    var num4 = Number("true");  //1
    var num5 = Number("0.0001");  //0.0001
    var num6 = Number("1.0010");  //1.001
    
    
    var num7 = parseInt("0xA");  //10,0x      
    var num8 = parseInt("0xf");  //15,0x          
    var num9 = parseInt("22.5");  //22 
    var num10 = parseInt("70");  //70
    var num11 = parseInt("1234blue");  //1234
    var num12 = parseInt("");  //NaN
    var num13 = parseInt("0xAF", 16);  //175,16        
    var num14 = parseInt("AF", 16);  //175,   16        0x
    var num15 = parseInt("AF");  //NaN
    var num16 = parseInt("10", 2);  //2,       ,            
    var num17 = parseInt("10", 8);  //8
    var num18 = parseInt("10", 10);  //10
    var num19 = parseInt("10", 16);  //16
    
    
    var num20 = parseFloat("1234blue");  //1234
    var num21 = parseFloat("0xA");  //0
    var num22 = parseFloat("22.5");  //22.5
    var num23 = parseFloat("22.34.5");  //22.34
    var num24 = parseFloat("0908.5");  //0908.5
    var num25 = parseFloat("3.125e7");  //31250000
    
    ==と==の違いは何ですか?
    ==等しい操作子を表しています.まず切り替えてから比較します.変換してから等しい場合はtrueに戻ります.==すべての操作子を表し、比較だけで変換せず、変換なしで等しい場合はtrueに戻ります.
    var result1 = ("55" == 55);  //true,     
    var result2 = (null == undefined);  //true
    var result3 = ("55" === 55);  //false,           
    var result4 = (null === undefined);  //false
    
    breakとcontinueの違いは何ですか?
    breakとcontinue文はサイクル中の正確な制御コードの実行に用いられ、break文は直ちにループを終了し、循環後のステートメントを強制的に実行し続ける.continueはすぐにループを終了しますが、ループを終了したらループのトップから続行し、これまでとその後のすべての結果を出力します.
    void 0とundefinedは使用シーンにどんな違いがありますか?
    まずコンセプトを言いますと、voidは演算子で、後に与えられた表式に対して値を求めてundefinedに戻ります.undefinedは値です.undefinedは予約ワードではなく、グローバルオブジェクトの属性の一つであり、下位バージョンのIEやローカルスコープで書き換えられる可能性がある(これは弊害があるので、ES 5の後にwindow.undefinedは書き込み不可、配置不可の属性として定義される).しかし、void 0が返した値はundefinedであり、書き換えられません.voidの後にはどんな表現が付いていても、void 1、void(1+1)、void(0)またはvoid「hello」、void(new Date)など、undefinedが戻ってきます.undefinedの代わりに完璧にできます.
  • undefined使用シーン:グローバルスコープ.
  • void使用シーン:ローカルスコープ.
  • は、undefined
  • を生成する.
  • は、関数宣言ではなく、JavaScriptエンジンによって関数表現として認識させる.通常は先に関数を宣言してから関数呼び出しを行います.結果は
  • です.
    function dot(){
    console.log(12);
    }
    dot();  //12 undefined
      :12        ,    return   undefined
    
    void演算子を使用すると、関数はすぐに実行される関数式として認識されます.
    void function dot(){
    console.log(12);
    }()  //12 undefined
    
    + function dot(){
    console.log(12);
    }()  //12 NaN
      :+undefined    NaN
    
  • は、JAvascriptとして機能する.プロトコルのURLはundefinedを生成する.javascript:プロトコルは、URLの本体が任意のjavascriptコードであることを宣言しています.javascript解釈器によってコンパイルされて実行されます.通常はjavascript:URLを使って、現在のページドキュメントのコードを変更しないように実行します.ウェブページでの賞賛、コレクションなどのボタンに対して、aタグを使って実現すれば、href=「javascript:void(0)」などの似たようなコードが使われます.このコードの役割はリンクをクリックする時にページがジャンプしません.href=「javascript:void(0)」では、Javascript:プロトコルで始まるURIを使っています.ブラウザはデフォルトでは、コロンの後のコードに値を求めて、結果を新しいページに表示しますが、例外的にundefinedという場合は、ブラウザはページの新しい値を更新しません.
  • 以下のコードの出力結果は?なぜですかconsole.log(1+1);/2理由:1と1は数値で加算されます.console.log("2"+"4");/24は文字列が連接されるからです.2つは文字列が連接されます.console.log(2+"4");/24の理由:1つの数値文字列は、数値が文字列に変換され、他の文字列と連接されます.
    以下のコードの出力結果は?
    var a = 1;  
    a+++a;  
    typeof a+2;  //"number2" 
      :a+++a  3,typeof3  "number"      ,         ,                    ,  "number2"
    
    以下のコードの出力結果は?なぜですか
    var a = 1;
    var b = 3;
    console.log( a+++b );  //4 
      :++        +,  a+++b     a++(+b),a++    1,1+3=4
    
    まとめ:
    var a=1;
    a+++a;  //3 
      :a+++a=(a++)+a,a++  1,             ,    a     2,1+2=3
    
    var a=3;
    a+++a;  //7 
      :    , 3+4   4+3
    
    フロントオペレータ++a,--a,先に演算してから実行します.後にオペレータa++を置き、a--を先に実行してから演算し、実行後の値は次の操作に残します.
    var a=20;
    ++a;  //21
    
    var a=20;
    --a;  //19
    
    var b=20;
    b++;  //20
    b+b;  //42
    
    var b=20;
    b--;  //20
    b+b;  //38
    
    行列を巡回して、各項目の平方を印刷します.
    var arr=[3,4,5];
    arr.forEach(function(item,index,array){
    console.log(item*item);
    });  //9 16 25
    
    JSONを巡回して、中の値を印刷します.
    var obj = {
     name: 'hunger', 
     sex: 'male', 
     age: 28 
    };
    for(var a in obj){
      console.log(obj[a]);
    }  //hunger male 28
    
    以下のコード出力結果は?どうしてですか?
    var a = 1, b = 2, c = 3;
    var val = typeof a + b || c >0
    console.log(val);  //"number2"    :typeof   16,+   13,||   5,>    11,     typeof a+b,  "number2"    ,                true,      ,           true            ,        "number2"    。
    
    var d = 5;
    var data = d == 5 && console.log('bb');
    console.log(data);  //bb undefined undefined 
    //  :=   ,   3,==     10,&&   6,     ==,  d==5,  true,    console.log   'bb',           undefined,        ,true&&undefined  undefined    data,     data undefined,                bb undefined。
    
    var d = 5;
    var data2 = d = 0 || console.log('haha');
    console.log(data2);  //haha undefined
    //  :||     ,         0, false,           ,     haha   ,  undefined,  false undefined        undefined(       false              ), undefined   d, d   data2,   data2 undefined,                haha undefined。
    
    
    var x = !!"Hello" + (!"world", !!"from here!!");
    console.log(x);  //2
    //  :        ,       ,                      ,!         false, !"world"  false(      ),!!             ,   Boolean()       ,   !       ,               ,  !!"from here!!" !!"Hello"    true,  `var x = !!"Hello" + (!"world", !!"from here!!");`    `var x = true+true;`  toString()             ,  `var x = 2;`,     x  2,          undefined。
    
    参考資料:
  • JSには基本タイプ(値)と複雑タイプ(引用)の違いは何ですか?
  • 演算子優先度
  • jsonサイクルエルゴード法