ホームページ >ウェブフロントエンド >jsチュートリアル >jsの各種データの型を判定するtypeofとobject.prototype.toStringの解説_基礎知識
1. typeof(param) はパラメータ (文字列) の型を返します
このメソッドは JS で定義されたグローバル メソッドであり、コンパイラによって最も一般的に使用されるメソッドでもあります。利点は、使用が簡単で覚えやすいことです。欠点は、オブジェクト、null、配列を判断できないことです。正規表現とカスタムオブジェクトは非常にうまく機能します。
サンプルコード:
function fn(){
alert('これは関数です');
}
function User(name){
this.name=name;
}
var user=new User('user');
console.log(typeof(str));
console.log(typeof(arr));
console.log(typeof(num));
console.log(typeof(bool) );
console.log(typeof(obj));
console.log(typeof(nullObj));
console.log(typeof(unknownObj));
console.log(typeof( reg));
console.log(typeof(fn));
console.log(typeof(user));
このメソッドはほとんどのタイプの判定をサポートでき、jquery のカプセル化された型判定はこのメソッドを使用します。少し混乱している人もいるかもしれないので、簡単に説明します。
1) call(param) 関数
a.fun().call(b) は、js では、オブジェクト b で a を置き換え、次に a の fun 関数を実行することを意味します。
this.showNam = function()
{
アラート(this.name)
}
}
関数 Class2()
{
this.name = "クラス 2"
}
var c1 = 新しいクラス 1();
var c2 = 新しいクラス 2();
2) Object.prototype.toString()
オブジェクトとは何ですか? 、Script56.chm (公式 M$ チュートリアル) には次のように書かれています: Object はすべての JScript オブジェクトに共通の機能を提供します。実際、Object はすべての js オブジェクトの祖先であり、js のすべてのオブジェクトは Object のインスタンスです。さまざまなオブジェクト 独自の独立したメソッドをオーバーライドします。プロトタイプに関しては、あまり深くする必要はありません。プロトタイプへの参照を返すだけで、プロトタイプにメソッドと属性を動的に追加できます小さな例
では、toString() は何をするのでしょうか? toString() 関数は、多くの JS マニュアルで次のように定義されています。
toString() メソッドは、論理値を文字列に変換し、結果を返すことができます。構文は booleanObject.toString() です。先ほども述べたように、js 内のオブジェクトはすべて継承されたオブジェクトであり、これらのオブジェクトにはカスタマイズされた関数が含まれたり、Object の一部の関数が再構築されたりして、すべて toString() 関数が書き換えられます。したがって、1 に param.prototype.toString() を直接記述して、param 自体によって書き換えられた toString() 関数が実行されることは考えられません。
さて、ここからが重要な瞬間です。toString() は何をするのか、またその役割は何でしょうか?
ES3 では、Object.prototype.toString メソッドの仕様は次のとおりです:
Object.prototype.toString()
toString メソッドが呼び出されると、次の手順が実行されます:
1. このオブジェクトの [[Class]] 属性の値を取得します。
2. 3 つの文字列「[object」、最初のステップの演算結果 Result(1)、および「]」連結後の新しい文字列を計算します。
3. 2 番目のステップ Result(2) の演算結果を返します。
ES3 では、[[クラス]] の内部プロパティが何種類あるかは仕様書にまとめられていませんが、[ の値は合計 10 種類あります。 [クラス]] それぞれ、ネイティブ オブジェクトの内部プロパティ: "Array"、"Boolean"、"Date"、"Error"、"Function"、"Math"、"Number"、"Object"、"RegExp"、 「文字列」ですので、 Object.prototype.toString() 出力結果は、[オブジェクト配列]、[オブジェクトブール] 形式の文字列になります。
ES5.1 では、仕様がより詳細に記述されることに加えて、Object.prototype.toString メソッドとオブジェクトの [[class]] 内部プロパティの定義にもいくつかの変更があります。 prototype.toString メソッドは次のとおりです:
Object.prototype.toString ()
toString メソッドが呼び出されると、次の手順が実行されます:
1 this の値が未定義の場合、「[object Unknown]」を返します。
2 this の値が null の場合、「[object Null]」を返します。
3 O をToObject(this) を呼び出した結果。
4 class を O の内部プロパティ [[Class]] の値にする。
5 連結後に 3 つの文字列 "[object "、class、および "]" を返す New文字列。
ステップ 1 と 2 は ES3 よりも 1、2、3 ステップ増えていることがわかります。ステップ 1 とステップ 2 は、「未定義」と「Null」が ES3 の値に属さないため、非常に特殊です。 [[クラス]] 属性。統計によると、返されるタイプは「引数」、「配列」、「ブール値」、「日付」、「エラー」、「関数」、「JSON」、「数学」、「数値」、「オブジェクト」です。 , "RegExp" ", "String" は ES3 よりも 2 つの型が増えています。引数オブジェクトの [[class]] は、以前の "Object" ではなく "Arguments" になりました。また、複数のグローバル オブジェクト JSON があり、その [ [クラス ]]値は「JSON」です。
最後に、Object.prototype.toString().call(param) によって返される [オブジェクト クラス] のクラスの最初の文字は大文字であり、JSON ですら大文字であることを皆さんに思い出していただきたいと思います。判断 エラーを防ぐためにすべてを小文字に変換します。Object.prototype.toString().call(param).toLowerCase() を使用するだけです。