基本タイプは何種類ありますか?nullはオブジェクトですか?基本データ型と複雑なデータ型ストレージの違いは何ですか?

1927 ワード

  • 基本タイプはundefined,null,bool,string,number,symbol(ES 6新規)
  • の6種類あります.
  • typeof nullが返す値はobjectであるがnullはオブジェクトではなく、基本データ型の一種である.
  • 基本データ型はスタックメモリに格納され、値が格納されます.
  • 複雑なデータ型の値はスタックメモリに格納され、アドレス(スタック内の値を指す)はスタックメモリに格納される.オブジェクトを別の変数に割り当てると、同じメモリ領域を指すアドレスがコピーされ、1つのオブジェクトが変更されると、別のオブジェクトも変化します.
  • /**
     * isComplex , true, false
     * @param {*} data  
     */
    
    function isComplex(data) {
        if (data && (typeof data === 'object' || typeof data === 'function')) {
            return true;
        }
        return false;
    }
    
    

    変数の正確なタイプを取得する関数をカプセル化

  • まずtypeofは基本データ型を正確に判断できるがnullを除いてtypeof nullが出力するのは対象である.
  • しかし、オブジェクトにとってtypeofはそのタイプを正確に判断することができず、typeofは1つの関数で「function」を出力することができ、それ以外はすべてobjectであり、この場合、オブジェクトのタイプを正確に知ることはできない.

  • 変数の正確なタイプを取得する関数をカプセル化しました
    function gettype(obj) {
      var type = typeof obj;
    
      if (type !== 'object') {
        return type;
      }
      // object , typeof 
    
      // object , Object.prototype.toString.call(obj) 
      return Object.prototype.toString.call(obj).replace(/^\[object (\S+)\]$/, '$1');
    }
    

    タイプを判断させる

    console.log(
        typeof 123, //"number"
        typeof 'dsfsf', //"string"
        typeof false, //"boolean"
        typeof [1,2,3], //"object"
        typeof {a:1,b:2,c:3}, //"object"
        typeof function(){console.log('aaa');}, //"function"
        typeof undefined, //"undefined"
        typeof null, //"object"
        typeof new Date(), //"object"
        typeof /^[a-zA-Z]{5,20}$/, //"object"
        typeof new Error() //"object"
    );
    

    nullとundefinedの違い

  • nullはjavascriptのキーワードで、特殊な値を表し、よく「空の値」を記述し、typeof演算は「object」を返すので、nullを「非オブジェクト」を意味する特殊なオブジェクト値と見なすことができます.
  • undefinedは予め定義されたグローバル変数であり、彼の値は「未定義」であり、typeof演算は「undefined」
  • を返す.