1.最初に5つのオリジナルタイプを紹介します
JavaScriptの5つの原始タイプは、文字列、数字、ブール、未定義、ヌルです
var name = "jack"; var age = 32; var single = false; var app; //undefinedConsole.log(Typeof name); //StringConsole.log(Typeof Age); //NUMBERCONSOLE.LOG(Typeof single); //booleanconsole.log(typeof app); //undefinedConsole.log(Typeof Null); //物体
nullを除く他の4つの基本タイプは、 typeofで識別できることがわかりました。
if(typeof name === "string"){name += "Zhang"; } if(typeof age === "number"){age ++; } if(typeof single === "boolean" && single){…} if(typeof app === "undefined"){app = {}; }Typeof Nullはオブジェクトを取得するため、===を使用してnullを直接検出します。
if(el === null){…}2。オブジェクト
JavaScriptオブジェクトには、組み込みのオブジェクト(日付、regexp、エラーなど)およびカスタムオブジェクトが含まれます。
(関数と配列も組み込みオブジェクトですが、次のセクションで個別に説明していることに注意してください)
検出された結果はすべてオブジェクトです。
console.log(typeof new date()); //objectconsole.log(typeof new regexp()); //objectconsole.log(typeof new error()); //objectconsole.log(typeof new Person()); //objectconsole.log(typeof new Person()); // typeofを使用して、カスタムオブジェクトもオブジェクトであることを検出します
代わりにインスタンスを使用して検出します。
var date = new date(); var reg = new regexp(); var err = new error(); var me = new Person(); if(date instanceof date){// retection date year = date.getTullyear(); } if(reg instanceof regexp){//正規表現reg.test(...); } if(err instanceof error){//検出例外ERR; } if(me instanceof person){//検出カスタムオブジェクト...}しかし、ブラウザのFrameaとFramebの両方で人が定義されていると仮定すると、カスタムオブジェクトには問題があります。 MEオブジェクトはFrameaで定義されており、 me instanceof Personを使用して真のものとして検出されます。しかし、カスタムオブジェクトMEがframeBに渡されると、framebでinstanceofがfalseになります。
このセクションの冒頭で述べたように、関数と配列も組み込みのオブジェクトですが、次のセクションに任されています。その理由は、関数と配列にもカスタムオブジェクトと同じ上記の問題があるためです。したがって、関数と配列は通常、instanceofを使用しません
3。関数
上記は、検出機能を使用することでフレームをクロスすることはできないと述べています。したがって、TypeOFは検出に使用されます。これは、クロスフレームです。
var func = function(){}; if(typeof func === 'function'){…}ただし、IE8はTypeOFを使用してDOM関数を検出し、オブジェクトを取得するため、IE8は以下で使用されます。
console.log(typeof document.getElementByID); // functionconsole.logではなくオブジェクト(typeof document.getelementsbytagname); // functionconsole.logではなくオブジェクト(typeof document.createelement); //関数ではない// IEブラウザIE8の前にブラウザを使用して、DOM関数がサポートされているかどうかを検出するかどうかを検出します(document){…} if( "getElementsBytagname" in document){…} if( "getElementsBytagname" in Document){…} if( "CreateRement" in "…} {…}}4。アレイ
上記は、Arrayがフレームを横切ることができないことを検出するためにinstanceofを使用していると述べました。 ES5の前に、検出方法をカスタマイズしました。最も正確な方法:配列に依存するtoStringは、固定された文字列「[オブジェクトアレイ]」を返して検出します。
function isArray(arr){return object.prototype.tostring.call(arr)=== "[object array]";}この方法は正確でエレガントなので、多くのライブラリで採用されました。最後に、ArrayはMDNを参照して、ES5のISARRAYメソッドとして導入されました。検出方法をカスタマイズする必要はありません。ISARRAY()を使用するだけです。
他の検出方法には独自の欠陥があり、100%正確にすることはできません。しかし、考える方法として、それから学ぶことができます。たとえば、Arrayがソートメソッドを含む唯一のオブジェクトであるという事実に依存することが検出されます。
function isArray(arr){return typeof arr.sort === "function";}カスタムオブジェクトに対してソートメソッドも定義されている場合、メソッドは無効になります。
V.属性
インスタンスオブジェクトでプロパティを使用するかどうかを検出します。属性がインスタンスオブジェクトであるかプロトタイプオブジェクトにあるかを気にしない場合は、単に使用できます
たとえば、リテラルオブジェクトのプロパティを検出します。
var person = {name: "jack"、age:33}; if( "name" in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in fired}たとえば、インスタンスオブジェクトプロパティ:
var person = function(name、age){this.name = name; this.age = age;}; person.prototype.location = "shanghai"; var me = new person( "jack"、33)if( "name" in me){…} //trueif(me.hasownproperty(me.hasownproperty(me "){…} // trueif(" in me){} {} //trueif(me.hasownproperty( "location")){…} // false他の方法は良くありません:
if(object [propname])//良くない場合、プロパティ値が0または1ではないことをどのようにして知っていますか? (object [propname] === null)//良くない場合、プロパティ値がnullではないことをどのようにして知っていますか? if(object [propname] === undefined)//良くない、プロパティ値が未定義でないことをどのようにして知っていますか?
要約します
typeofを使用して、文字列、数字、ブール、未定義、機能を検出します
===でnullを検出します
iSarray()で配列を検出する
インスタンスを使用して、内蔵オブジェクト(関数と配列を除く)とカスタムオブジェクトを検出します
HasownPropertyを使用して、プロパティがインスタンスオブジェクトにあるかどうかを検出します。属性がインスタンスオブジェクトであるかプロトタイプオブジェクトにあるかを気にしない場合は、単に使用できます
さて、さまざまなタイプのJavaScriptを検出する方法についてのこの記事はすべてです。誰もがこの記事の内容を慎重に研究できることを願っています。これは、誰もがJavaScriptを学ぶのに役立つかもしれません。