JavaScriptにはどのようなデータタイプがありますか?データタイプの判断にはどのような方法がありますか?

4406 ワード

jsの8種類のデータタイプ
JavaScriptには8種類のデータタイプがあります.基本データタイプ(number、string、bollan、null、undefined、smborg、bigint)と参照データタイプobjectがあります.
number
JavaScriptの整数と浮動小数点は浮動小数点の基準に従って格納されます.
 64     ,       :
 1 :    , 0    , 1    
 2  12 :       
 13  64 :       
ここで、記号のビットは正か負かを決定し、指数の部分は一つの数の大きさを決定し、小数の部分は一つの数の精度を決定しました.
数値精度JavaScriptが提供する有効数字は最長53の2進数ビットであり、これは絶対値が2より小さい53乗の整数が正確に表現できることを意味する.
JavaScript         :
(-1)^    * 1.xxx...xxx * 2^  

Math.pow(2, 53) === Math.pow(2, 53) + 1
0.1+0.2=0.3000万0004は精度が足りないからです.http://0.30000000000000004.com/)Number.MAX_SAFE_INTEGERとNumber.MIN_SAFE_INTEGERはそれぞれjsの最大安全数と最小安全数を表しています.
数値範囲の指数部分の最大値は2047(2^11-1)で、半分を割ると負を表します.JavaScriptが表すことができる数値範囲は2^1024から2^(-1023)Number.MAX_です.VALEとNumber.MIN_VALEはjsが表すことができる最大の数字と最小の数字を表しています.一つの浮動小数点の値がjsが表す最大(最小)の値より大きい場合、その結果はInfinity(-Infinity)で、12/0はInfinityに戻り、-12/0は-Infinityに戻ります.
NaN NaNはnot a number(数字ではない)を表しています.NaNといかなる値も同じではありません.自分を含みます.だからx!x x xがxがNaNである場合のみ成立します.0/0はNaNに戻ります.
  • Number.isNaN(Number.NaN)
  • x!=xは、xがNaN
  • であるかどうかを検出するために使用されてもよい.
  • Number.isfinite()は、Number.NaNとInfinity.bigintを検出するために使用できます.任意の精度で整数を表現できます.jsの安全数を超えても、小数BigInt(123)string jsの文字列は安全に格納し、使用できません.str.lengthは文字列の基本的なデータの種類ではありません.オブジェクトならではの属性と方法を使って操作することができます.これは3つのキーの基本データタイプが自分の対応するオブジェクト(Number,String,Boolean)があります.この3つのオブジェクトは数字、文字列とブール値のパッケージです.対象環境で文字列を使用するとき(例えば、stregthを使用します.)JavaScriptはこの文字列の内部にStringオブジェクトを作成します.このオブジェクトは元の文字列の値に代わって対応します.このとき作成されたStringオブジェクトは瞬時に存在するだけで、使用後にシステムは自動的に廃棄されます.bollan null、undefined、0、NaN、'はfalse null、undefinelに変換できます.null==undefinedはfalse smbol smbolに戻り、ユニークな値
  • を表します.
    let s = Symbol(); //                
    let s1 = Symbol('s1'); //      symbol    
    let s2 = Symbol('s1'); // s1 == s2   false
    
    let a1 = Symbol.for('aa');
    let a2 = Symbol.for('aa'); // a1 === a2   true
  • がsmbolを対象とした属性名の場合、点を介して属性にアクセスできず、点を介してアクセスすると、jsは属性名を文字列
  • に解析します.
  • JSONにはSymbolタイプの値を格納できない
  • は列挙できません.Symbol値が対象属性名である場合、オブジェクトが重複する属性がないことを保証できます.for inなどはSymbol値を列挙できません.Object.getOwn PropertySymbors()を呼び出してSymbol値を取得します.Symbolの非列挙的な特性を利用して、jectはjectでjectオブジェクトをシミュレートして作成する特殊な関数です.よく使う対象は以下の通りです.
  • function:JavaScriptの関数は実行可能なコードを持つオブジェクトであり、呼び出し関数によっていくつかの動作を実行することができます.
  • array
  • class
  • Date日付
  • RegExp正規表現
  • はすべての中国語の文字にマッチしています.メールボックス
  • にマッチしています.
  • Math数学
  • Math.ceirl(),Math.flor()
  • Math.round()、Math.randm()
  • JSON
  • null、NaN、Infinity、-Infinity、正則の対象とundefinedはいずれもnull
  • に転送されます.
  • JSON.parse(JSON.strigify()
  • Err:プログラムで発生したシンタックスエラーと実行中にエラーが発生したオブジェクト
  • データタイプ判定
    typeof
  • は、非objectの基本タイプに対して、null以外は予想外の結果を返すことができます.
  • 参照タイプについては、function以外は、すべてobject
  • に戻る.
  • はnullに対して、object
  • に戻ります.
  • は、functionに対して、function
  • に戻る.
  • typeof(typeof a)は、string
  • を返します.
    typeof NaNはnumberに戻りますが、NaNは数値計算には使用できませんので、typeofで数字を判断する際には、typeof num='number'&Number.isfinite(num)をお勧めします.
    instance of
    A instance of Bは、BのプロトタイプがAのプロトタイプチェーン上にinstance ofであるかどうかを判断するための問題です.グローバル実行環境が一つしかないと仮定しています.二つ以上のグローバル実行環境があれば、異なる構造関数が存在します.この時、instance ofは判断できません.
    Object.prototype.toString.call
    Object.prototype.toString.call=='[object Boolean]'
    トラック
    ステートメントがコンストラクタを定義すると、jsはコンストラクタにプロトタイプのオブジェクトを追加します.このプロトタイプのオブジェクトはコンストラクタの属性を持つコンストラクタがあります.newとコンストラクタを使用してインスタンスオブジェクトを作成すると、インスタンスオブジェクトはプロトタイプのオブジェクトのstructor属性を継承します.
    let a = [], b = 100;
    a.constructor == Array
    b.constructor == Number
    プログラマがprototypeを書き直すと、元のconstructorがなくなります.
    JavaScriptを使ってデータの種類を判断する関数を書きます.
    function getType(data) {
        if(data === null) return 'Type: null';
        else if(data === undefined) return 'Type: undefined';
        else if(typeof data == 'number' && Number.isFinite(data)) return 'Type: number';
        else if(typeof data == 'string') return 'Type: string';
        else if(typeof data == 'boolean') return 'Type: boolean';
        else if(typeof data == 'function') return 'Type: function';
        else {
            let tmp = Object.prototype.toString.call(data);
            return 'Type:' + tmp.slice(7, tmp.length-1).toLowerCase();
        }
    }
    転載先:https://www.cnblogs.com/lemachin/p/11090684.html