js での typeof の使い方を理解するための記事

js での typeof の使い方を理解するための記事

ベース

typeof 演算子は JavaScript における基本的な知識ポイントです。一定の制限(下記参照)はあるものの、フロントエンド JS の実際のコーディングプロセスでは、依然として最もよく使用される型判定方法です。

したがって、この演算子の特性を習得することは、優れたコードを書く上で非常に役立ちます。

typeof は、演算値のデータ型を示す文字列を返します。基本的な構文は次のとおりです。

オペランドの型
typeof(オペランド)

戻り値の型として可能な文字列には、文字列、ブール値、数値、bigint、シンボル、未定義、関数、オブジェクトなどがあります。

戻り値の型

以下の分類の紹介は、typeof のすべての使用法を網羅し、可能な戻り値の型に従って行われます。

文字列とブール値

文字列とブール値はそれぞれ文字列とブール値を返します。

String() と Boolean() を含みます。

typeof '1' // '文字列'
typeof String(1) // '文字列'
typeof true // 'ブール値'
typeof Boolean() // 'ブール値'

数値と bigint

数値は、Number()、NaN、Infinity などの数値と、Math オブジェクトの下にあるさまざまな数学定数の値を返します。

BigInt数値型の値はBigInt(1)を含めてbigintとして返されます。

typeof 1 // '数値'
typeof NaN // '数値'
typeof Math.PI // '数値'
typeof 42n // 'bigint'
typeof BigInt(1) // 'bigint'

シンボル

シンボル値は、Symbol() を含むシンボルを返します。

typeof Symbol() // 'シンボル'
typeof Symbol('foo') // 'シンボル'
typeof Symbol.iterator // 'シンボル'

未定義

undefined 自体は undefined を返します。

存在しない変数、または定義されているが初期値が割り当てられていない変数は、undefined を返します。

document.all などのブラウザの非標準機能もあります。

typeof undefined // 'undefined'
typeof ttttttt // 'undefined'
typeof document.all // '未定義'

関数

関数は関数を返します。

es6 クラス宣言の使用を含みます。

String、Number、BigInt、Boolean、RegExp、Error、Object、Date、Array、Function、Symbol 自体の組み込みオブジェクトもあります。

そして Function()、新しい Function()。

関数関数() {}
typeof func // '関数'
typeof class cs {} // 'function'
typeof String // 'function'
typeof RegExp // 'function'
typeof new Function() // 'function'

物体

オブジェクト、配列、null、正規表現、すべてオブジェクトを返します。

Math、JSON オブジェクト自体を含みます。

Function に加えて、新しい演算子を使用するデータもあります。

typeof {} // 'オブジェクト'
typeof [] // 'オブジェクト'
typeof null // 'オブジェクト'
typeof /d/ // 'オブジェクト'
typeof Math // 'オブジェクト'
typeof new Number(1) // 'オブジェクト'

他の

他のほとんどの JavaScript キーワードの場合、結果の値はオブジェクトまたは関数のいずれかになります。

注: ほとんどの小文字はオブジェクトで始まり、ほとんどの大文字はメソッドで始まります。アラート、プロンプトなど、明らかに知られている一般的な方法はカウントされません。

さらに、各 js 環境に特化して実装されるホスト オブジェクトが存在します。

よくある質問

参照エラー

let および const ブロックスコープ変数が定義される前に、typeof を使用すると ReferenceError がスローされます。

ブロックレベルのスコープ変数は初期化されるまでヘッダー内に一時的なデッドゾーンを形成するため、初期化されなかった場合は参照エラーが報告されます。

t 型
t = 1とする
// VM327:1 キャッチされない ReferenceError: t が定義されていません
// <匿名>:1:1 で

var を使用して変数を定義すると、エラーは報告されず、 undefined が返されます。

改善すべき変数があり、一時的なデッドゾーンは形成されません。

null 型

typeof null === 'object' の場合、考えられる説明を覚えておいてください:

JavaScript の元の実装では、JavaScript の値は、型と実際のデータ値を示すタグで表されていました。オブジェクトのタイプタグは 0 です。による

null は null ポインター (ほとんどのプラットフォームでは 0x00) を表すため、null の型タグは 0 となり、typeof null は "object" を返します。

typeofの制限

typeof の制限は、null、配列、オブジェクト、正規表現の型を正確に判別できないことです。

したがって、正確な判断をしたい場合は、他の技術的手段や複合的な判断を使用する必要があります。

次のように配列タイプを決定します。

Object.prototype.toString.call([]) // '[オブジェクト配列]'

[] 配列のインスタンス // true

[].constructor === 配列 // true

その中でも、Object.prototype.toString.call は、データ型を正確に判別するために JavaScript でよく使用されるメソッドです。

拡張: BigInt 型

BigInt は、任意の精度の整数を表すことができる、ES11 で追加された新しい基本型です。

2^53 - 1 より大きい整数を表す方法を提供し、任意の大きさの整数を表すことができます。

これは、整数の末尾に n を追加するか、コンストラクター BigInt() を呼び出すことによって作成されます。

IEはサポートされていません。

10n
ビッグイント(99) // 99n

注記:

  • BigInt では、演算子 +、*、-、**、% を使用できます。
  • >>> (符号なし右シフト) 以外のビット演算もサポートされています。 BigInt は常に符号付きであるためです。
  • BigInt は単項 (+) 演算子をサポートしていないため、型エラーが報告されます。
  • BigInt の Math オブジェクト内のメソッドは使用できません。
  • BigInt は計算で Number と混在させることはできません。混在させると、TypeError がスローされます。
  • BigInt を Boolean に変換すると、Number のように動作します。
  • BigInt 変数は、Number 変数に変換すると精度が失われる可能性があります。
  • typeof 操作は bigint を返します。
  • ObjectやStringなどの組み込みオブジェクトを変換に使用する場合は、Numberと同様になります。
  • BigInt で / 除算演算を使用すると、小数点以下が丸められます。
  • Number と BigInt は厳密でない等価性を比較できます。
  • JSON.stringify は BigInt を処理するときに TypeError をスローします。

要約する

js での typeof の使用に関するこの記事はこれで終わりです。js での typeof の使用に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後も 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • js における typeof の使用法の概要
  • javascript typeof の使用法と typeof 演算子の紹介 [詳細]
  • js で変数の型を決定する typeof 関数の使用法の概要
  • Javascript における typeof の使用法の概要
  • js は空かどうかを判断し、typeof を使用します (詳細な説明)
  • Javascript の typeof の使用法
  • JavaScript における typeof と instanceof の使用法の詳細な説明
  • JavaScript における instanceof 演算子と typeof 演算子の使用法と違いの詳細な分析
  • JavaScript での typeof 演算子の使用例

<<:  方言変換のためのApache Calciteコード

>>:  ユーザーはその理由を知る必要がある

推薦する

Vue はデータの変更をどのように追跡しますか?

目次背景例誤解 - コールスタックを表示するためにウォッチでブレークポイントを設定する正しいアプロー...

ウェブ上の模倣と盗作に関する議論

2005年に業界に入ってから数か月後、労働者の日休みの期間中、1か月以上毎日12時まで残業をしました...

dockerコマンドの使用にはsudoは必要ありません

docker デーモンは通常の TCP ポートではなくホストの Unix ソケットにバインドする必要...

antd+reactプロジェクトをviteに移行するためのソリューションの詳細な説明

Antd+react+webpackは、多くの場合、Reactテクノロジースタックに基づくフロントエ...

MySQL 8のパスワードを忘れた場合のベストな対処法の簡単な分析

序文MySQL に精通している読者は、MySQL が非常に迅速に更新されることに気付くかもしれません...

Vue2 における 12 種類のコンポーネント通信

目次1. 小道具2..同期3.vモデル4.参照5. $emit/v-on 6. $attrs/$li...

MySql ログイン パスワードを忘れた場合とパスワードを忘れた場合の解決策

方法1: MySQL では、次のコマンド ラインで MySQL サーバーを起動することにより、アクセ...

HTML ページ ヘッダー コード例の詳細な説明

知識ポイント1: ヘッダー情報にWebページのベースURLを設定するベース URL の本質は、ハイパ...

mysql 8.0.15 winx64 解凍バージョン グラフィック インストール チュートリアル

システムをインストールした後、毎回いくつかのソフトウェアを再インストールする必要があります。ソフトウ...

docker-compose を使用して mongodb と mysql を構築する詳細なプロセス

docker-compose で mongodb と mysql を構築する詳細な方法を見てみましょ...

MySQL 5.7.18 バージョンの無料インストール構成チュートリアル

MySQLはインストール版と無料インストール版に分かれていますインストール版の拡張子はmsi、無料イ...

Vue のフィルターウィジェットの詳細な使用方法

この記事では、参考までにVue More Filter Itemウィジェットの実装方法を例として紹介...

Vue で動的に追加されたルーティング ページの更新時に失敗する理由と解決策

目次問題の説明シナリオインターフェースリターンフロントエンドメニューの定義vuex のメソッド問題原...

uniapp は日付と時刻の選択機能を実装します

この記事の例では、日付と時刻の選択を実装するための uniapp の具体的なコードを参考までに共有し...

初めてDockerイメージを構築、実行、公開、取得するための詳細な手順

1. はじめに以前は、Python アプリケーションの作成を開始したい場合、最初のステップはマシンに...