JavaScript の型チェックと内部プロパティ [[Class]]

黄舟
リリース: 2017-02-28 14:53:14
オリジナル
1261 人が閲覧しました

すべてのオブジェクトには内部プロパティ [[Class]] が含まれています

このプロパティには直接アクセスできませんが、メソッドを通じてアクセスできます
このメソッドは Object.prototype.toString.call(.. .) <code>Object.prototype.toString.call(...)
这也是比较靠谱的检查类型的方法(instanceof、constructor等等不靠谱)

比如说我们检测一个数组

Object.prototype.toString.call([1,2,3]);
ログイン後にコピー

控制台打印"[object Array]"これは、型をチェックするより信頼性の高い方法でもあります (instanceof、コンストラクターなどは信頼できません)

たとえば、配列をチェックする場合

function classOf(obj){
    return Object.prototype.toString.call(obj).slice(8,-1);
}
ログイン後にコピー

コンソールは "[object Array]" を出力します
ここでの「Array」は、実際にはネイティブ関数 Array() 内の [[Class]] 属性を呼び出します

型を検出する関数をカプセル化できます

console.log(classOf({&#39;a&#39;:1}));
console.log(classOf([1,2,3]));
console.log(classOf(function a(){}));
console.log(classOf(/a/));
console.log(classOf(123));
console.log(classOf(&#39;abc&#39;));
console.log(classOf(true));
console.log(classOf(Symbol()));
console.log(classOf(undefined));
console.log(classOf(null));
ログイン後にコピー

関数は非常に単純で、単に Object The toString を呼び出すだけですプロトタイプのメソッドは、私たちに役立つ情報をインターセプトしますこの関数を試すことができます

function demo(){
    console.log(classOf(arguments));
}
demo();//"Arguments"
ログイン後にコピー

コンソール印刷


しかし、オブジェクトだけでなく、基本的な型の値である文字列、数値、ブール値も使用できることがわかりました。

これは、JavaScript が基本型の値のラッパー オブジェクトをラップするためです
それらをオブジェクトに変換し、String()、Number()、および Boolean() には [[Class]] 属性があります

unknown と null は対応していませんがネイティブ関数 Unknown() と Null() ですが、返される内部プロパティはまだあります

この関数を通じて、型を正確に決定できます
パラメータ リストも決定できます

console.log({&#39;a&#39;:1}.toString());
console.log([1,2,3].toString());
console.log(function a(){}.toString());
console.log(/a/.toString());
console.log(123..toString());
// 只写一个点会被当成小数点,所以再写一个点代表方法调用console.log(&#39;abc&#39;.toString());
console.log(true.toString());
console.log(Symbol().toString());
// 基本类型调用方法,会自动封装为对象
// 不能使用undefined.toString()或null.toString()会报错,因为没有对应的封装对象
ログイン後にコピー

Object.prototype.toString.call( に戻ります) ...) 型を決定するためになぜこのような面倒な文字列を調べる必要があるのでしょうか? toString() を直接呼び出すと何が起こるかわかります

rrreee




通常のオブジェクトだけが必要なものを返すことがわかります。
これは、通常のオブジェクトが最上位のプロトタイプ オブジェクトの toString メソッドを直接呼び出すためです
そして、配列、関数、およびこれらの基本的なパッケージ化オブジェクトは Object を継承し、同時にいくつかのメソッドをオーバーライドするためです

toString メソッドを探すときは、それ自体が存在する必要がありますプロトタイプチェーン 最初にメソッドが見つかります

そのため、call を使用して最上位のプロトタイプ Object.prototype の d の toString メソッドを呼び出す必要があります

上記は JavaScript の型チェックと内部プロパティ [[Class]] の内容です。内容については、PHP 中国語 Web サイト (www.php.cn) にご注意ください。


🎜🎜
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!