ホームページ ウェブフロントエンド jsチュートリアル JavaScriptにおけるtypeof演算子とinstanceof演算子の使用に関するディスカッション_基礎知識

JavaScriptにおけるtypeof演算子とinstanceof演算子の使用に関するディスカッション_基礎知識

May 16, 2016 pm 05:33 PM
instanceof typeof オペレーター

JavaScript コードを作成する場合、typeof と instanceof の 2 つの演算子が時々使用され、必ず使用する必要があります。しかし!これらの演算子を使用すると、望ましい結果を直接得るのは常に困難です。「これら 2 つの演算子は、おそらく JavaScript の最大の設計上の欠陥です。なぜなら、これらの演算子から望ましい結果を得るのはほぼ不可能だからです。」
typeof
説明: typeof は式のデータ型の文字列を返し、戻り結果は数値、ブール値、文字列、オブジェクト、未定義、関数を含む js の基本データ型です。
説明文を見る限り、問題はなさそうです。

次のコードは数値変数を書き込み、typeof の後の結果は「number」です。

コードをコピーします コードは次のとおりです。

var a = 1; .log( typeof(a)); //=>number

Number 型のコンストラクター new を使用して変数を作成すると、typeof の後の結果は「object」になります。

コードをコピーします コードは次のとおりです。
var a = new Number(1);
console.log(typeof(a)); //=>object

上記の 2 つの出力結果は問題ないようですが、これは本から見て当然のことのようです. JavaScript がそのように設計されているからです。

でも!問題は、typeof が呼び出されるので、値を使用して直接作成されたか、型コンストラクターを使用して作成されたかに関係なく、変数の型を正確に返さなければならないことです。他に何に使えばいいの?
つまり:

コードをコピーします コードは次のとおりです:
var a = 1;
var b = new Number(1);

正確に言えば、目的の結果を得るには、変数 a と変数 b の型は Number である必要があります。
正確な型情報は、変数の内部プロパティ [[Class]] の値に格納されます。これは、Object.prototype で定義されたメソッド toString を使用して取得されます。

型情報の取得:

コードのコピー コードは次のとおりです:
var a = 1;
var b = new Number(1);
console.log(Object.prototype.toString. call(b ));


出力:


コードをコピー コードは次のとおりです。 🎜> [オブジェクト番号]
[オブジェクト番号]


これはすでに非常に簡単ではないでしょうか。少し処理して直接の結果を取得してみましょう:


コードをコピーします コードは次のとおりです。 var a = 1
var b = new Number(1);
console.log(Object.prototype.toString.call(a).slice(8,-1));
console.log(Object.prototype.toString.call(b).スライス(8,-1));


出力:
数値
数値
これは望ましい結果です。
より良く使用するために、変数が特定の型であるかどうかを判断するメソッドをカプセル化します。



コードをコピー コード function is(obj,type) {
var clas = Object.prototype.toString.call(obj).slice(8, -1); obj !== unknown && obj !== null && clas === type;
}


まず、それらの typeof 出力を見てみましょう。



コードをコピーします
コードは次のとおりです。 var a1=1; a2=数値(1); var b1="hello";
var c1=[1,2,3]; =new Array(1 ,2,3);
console.log("a1 の typeof:" typeof(a1));
console.log("a2 の typeof:" typeof(a2)); console.log(" b1 の typeof:" typeof(b1));
console.log("b2 の typeof:" typeof(b2));
console.log("c1 の typeof:" typeof(c1)) ;
console .log("c2 の typeof:" typeof(c2));
出力:
a1 の typeof:number
a2 の typeof:object
b1 の typeof:string
b2 の typeof :object
c1 の typeof:object
c2 の typeof:object


The newly created function we use is:
Copy the code The code is as follows:

console.log("a1 is Number:" is(a1,"Number"));
console.log("a2 is Number:" is(a2,"Number"));
console.log( "b1 is String:" is(b1,"String"));
console.log("b2 is String:" is(b2,"String"));
console.log("c1 is Array :" is(c1,"Array"));
console.log("c2 is Array:" is(c2,"Array"));
Output:
a1 is Number:true
a2 is Number:true
b1 is String:true
b2 is String:true
c1 is Array:true
c2 is Array:true

Note: typeof It is not useless. The actual use is to detect whether a variable has been defined or assigned a value.
instanceof
Description: Determine whether an object is a certain data type, or whether a variable is an instance of an object.
The instanceof operator is also powerless when used to compare two built-in type variables, and will also be dissatisfied with the result.
Copy code The code is as follows:

console.log("abc" instanceof String); / / false
console.log("abc" instanceof Object); // false
console.log(new String("abc") instanceof String); // true
console.log(new String( "abc") instanceof Object); // true

Reflects the relationship accurately only when comparing custom objects.
Copy code The code is as follows:

function Person() {}
function Man( ) {}
Man.prototype = new Person();
console.log(new Man() instanceof Man); // true
console.log(new Man() instanceof Person); // true
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

インスタンスオブは何をするのですか? インスタンスオブは何をするのですか? Nov 14, 2023 pm 03:50 PM

instanceof の機能は、オブジェクトが特定のクラスのインスタンスであるかどうか、またはオブジェクトが特定のインターフェイスを実装しているかどうかを判断することです。 instanceof は、オブジェクトが指定されたタイプであるかどうかを確認するために使用される演算子です。 instanceof 演算子の使用シナリオ: 1. 型チェック: オブジェクトの特定の型を判断し、異なる型に応じて異なるロジックを実行するために使用できます; 2. インターフェイスの判断: オブジェクトがインターフェイスを実装しているかどうかを判断するために使用できます。 、オブジェクトがインターフェイスを実装しているかどうかを判断するため、インターフェイスの定義は対応するメソッドを呼び出します; 3. 下方変換など。

Linux コマンドにおける「!」演算子の 8 つの謎の使用法 Linux コマンドにおける「!」演算子の 8 つの謎の使用法 Jun 27, 2023 pm 12:51 PM

「!」記号を使用するほとんどの Linux コマンドの使用法は、シェルによって異なる場合があります。私が提供する例は通常 bash シェルで使用されますが、他の一部の Linux シェルでは実装が異なる場合や、「!」記号の特定の使用をまったくサポートしていない場合があります。 Linux コマンドにおける「!」記号の驚くべき謎に満ちた使い方を見てみましょう。 1. コマンド番号を使用して履歴からコマンドを実行する あまり知られていないかもしれませんが、コマンド履歴 (すでに実行されたコマンド) からコマンドを実行できます。まず、「history」コマンドを実行してコマンドの番号を見つけます。 linuxmi@linuxmi:~/www.linuxmi.

PHP でのモジュロ等号演算子の使用法について詳しくは、こちらをご覧ください。 PHP でのモジュロ等号演算子の使用法について詳しくは、こちらをご覧ください。 Mar 19, 2024 pm 12:54 PM

モジュロ等号演算子 (%) は、PHP で非常に一般的に使用される演算子であり、2 つの数値を除算した余りを計算するために使用されます。この記事では、モジュラー等号演算子の使用法を詳しく説明し、読者の理解を深めるために具体的なコード例を示します。まず、簡単な例を見てみましょう。ある数値を別の数値で割った余りを計算する必要があるとします。 $a=10;$b=3;$remainder=$a%$b;echo"10 割った 3は: &

Javaでinstanceofは何を意味しますか Javaでinstanceofは何を意味しますか Nov 13, 2023 pm 01:52 PM

Java では、instanceof は、オブジェクトがクラスのインスタンスであるか、クラスのサブクラスのインスタンスであるかをチェックするために使用される二項演算子です。その構文は「オブジェクト インスタンスオブ クラス」です。ここで、オブジェクトはオブジェクト引用符、クラスはクラスです名前またはインターフェイス名。

演算子での SQL の使用法 演算子での SQL の使用法 Aug 04, 2023 pm 03:58 PM

SQL での演算子の使用法: 1. 単一列のマッチング、IN 演算子を使用して列内の複数の値を一致させることができます; 2. 複数列のマッチング、IN 演算子を使用して複数の列の値を一致させることもできます。 3. サブクエリ。IN 演算子は、メイン クエリ内にネストされたクエリ ステートメントであるサブクエリでも使用できます。

php7 に 2 つの新しい演算子「?->」と「??」が追加されました。 php7 に 2 つの新しい演算子「?->」と「??」が追加されました。 Mar 21, 2023 pm 03:49 PM

以前の PHP バージョンでは、変数を定義していない場合、それを直接使用すると、「未定義の変数」エラーが発生しました。ただし、PHP7 では、いくつかの新機能を使用してこの問題を回避できます。これらの新機能には、?-> と ?? という 2 つの新しい演算子が含まれています。それぞれ 2 つの異なるタイプの問題を解決できます。

Javaでinstanceof演算子を使用する方法 Javaでinstanceof演算子を使用する方法 May 19, 2023 am 08:16 AM

概念 1. この演算子は、オブジェクトを操作し、オブジェクトが特定のタイプ (タイプまたはインターフェース・タイプ) であるかどうかを確認するために使用されます。形式 2. 計算機の左側の変数が指すオブジェクトが演算子の右側のクラスまたはインターフェイスのオブジェクトである場合、結果は true になります。 (Objectreferencevariable)instanceof(class/interfacetype) インスタンス packagecom.verify_instanceof;publicclassTestInstanceOf{publicstaticvoidmain(String[]args){//次の 4 行のコードは、instanceof を証明するために使用されます。

Javaのinstanceof演算子 Javaのinstanceof演算子 Sep 01, 2023 pm 08:01 PM

この演算子はオブジェクト参照変数にのみ使用されます。この演算子は、オブジェクトが特定の型 (クラス型またはインターフェイス型) に属しているかどうかを確認します。 instanceof 演算子は -(Objectreferencevariable)instanceof(class/interfacetype) のように記述されます。演算子の左側の変数によって参照されるオブジェクトが右側のクラス/インターフェイス型の IS-A チェックに合格した場合、結果は次のようになります。本当だ。以下は例です - ライブ デモンストレーションの例 publicclassTest{ publicstaticvoidmain(Stringargs[]){&nbs

See all articles