JSのtypeofとタイプ判断

2503 ワード

要約
この記事は、typeof演算子が基本タイプと参照タイプの違いを判断することと、配列タイプと空オブジェクトの判断方法を説明します.
typeof
ECMAScriptは5種類のオリジナルタイプがあります.すなわち、Unidefined、Null、Boolean、Number、Stringです.私たちは、typeof演算子を使用して変数を求めることができるタイプを知っていますが、参照型変数はobjectに戻ります.つまり、typeofは基本型の値変数を正しく識別することしかできません.
var a = "abc";
typeof a;// "string"

var b = 123;
typeof b;// "number"

var c = true;
typeof c;// "boolean"

var d = null;
typeof d;// "object"

var f = undefined;
typeof f;// "undefined"

var g;
typeof g;// "undefined"
typeof x;// "object"
なぜtypeof演算子はnull値に対して「object」を返しますか?これは実際にJavaScriptが最初に実現した誤りで、ECMAScriptによって引き継がれました.現在、nullは対象のプレースホルダと考えられており、この矛盾を説明していますが、技術的にはまだオリジナルの値です.
最後の方がおかしいです.typeofの存在しない変数xは、「undefined」ではなく「object」に戻りました.
私達は下記のコードに来ています.
var a = function() {};
typeof a; // "function"

var b = [1,2,3];
typeof b; // "object"

var c = {};
typeof c; // "object"
配列とオブジェクトについては「Object」に戻りますので、変数は配列かオブジェクトかどうかを判断するために日常的に開発されています.
タイプ判定
タイプ判定は、行列かどうかを判断し、空のオブジェクトかを判断します.これはこの需要に対して、日常的に使ったり見たりしたことがある判断方法です.
配列があるかどうかを判断する方法:var a = [1,2,3,4,5];.
toString.call(a); // "[object Array]"
方法二:
a instanceof Array; //true
方法三:
a.constructor == Array; //true
第一の方法は一般的で、つまりObject.prototype.toString.call(a)の略字である.instanceofおよびconstructorによって判断された変数は、現在のページで宣言されなければならない.例えば、1つのページ(親ページ)にフレームがあり、フレーム内に1つのページ(サブページ)を参照し、サブページでaを宣言し、親ページの変数に値を与えた場合、Array == object.constructorfalseに戻る.
空のオブジェクトに変数があるかどうかを判断する方法1:
JSON.stringify(obj); // "{}"
JSONオブジェクトに変換して、大かっこが空かどうか判断します.
方法二:
if(obj.id){
   //    id  ....
}
この方法は土が多いので、大体の人は思いつきます.前提は相手の中にある属性を知ることです.
方法三:
function isEmptyObject(e) {  
    var t;  
    for (t in e)  
        return !1;  
    return !0  
} 

//true
isEmptyObject(obj); 
//false
isEmptyObject({
    "a":1,
    "b":2
}); 
この方法はjQueryのisEmptyObject()方法の実現方式です.
方法4:ES 6文法var obj = {};を使用して、配列を返します.配列長が0より大きいかどうかを判断するだけでいいです.
function isEmptyObject(obj){
  if(Object.keys(obj).length > 0) return true;
  return false;
使い方を勧めます.
文章の出所:http://dunizb.com
原文のリンク:http://dunizb.com/2017/07/08/JS-in-the-typeof-and-type-judgment/