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コード

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

推薦する

ブラウザでTIF形式の画像を表示する方法

ブラウザはTIF形式の画像を表示しますコードをコピーコードは次のとおりです。 <html>...

MySQLデータベースの増分バックアップのアイデアと方法

MySQL データベースの増分バックアップを実行するには、データベース構成ファイル /etc/my....

Linux システムでキャッシュをクリアする方法の概要

1) キャッシュメカニズムの紹介Linux システムでは、ファイルシステムのパフォーマンスを向上させ...

Docker で MySQL をデプロイする詳細なプロセス (Docker でデプロイされる一般的なアプリケーション)

以前にも紹介しました: docker (一般的なアプリケーションのデプロイ): docker dep...

JS 実用的なオブジェクト指向スネークゲームの例

目次考える1. 貪欲な蛇の効果画像2. スネークの分析2.1 ゲーム開始機能2.2 運動機能2.2....

Dockerを使用してNextCloudネットワークディスクを展開する方法

NextCloud コンピュータ上の任意のファイルやフォルダを共有し、NextCloud サーバーと...

よく使われる Docker コマンドと例の概要と分析

目次1. コンテナライフサイクル管理(1)ドッカー実行(2)スタート/ストップ/リスタート(3)ドッ...

JavaScript の navigator.userAgent がブラウザ情報を取得するケースの説明

ブラウザはおそらく私たちにとって最も馴染みのあるツールです。 Firefox、Opera、Safar...

Linux での mysql-5.7.28 インストール チュートリアル

1. 公式ウェブサイトから Linux バージョンをダウンロードします: https://dev.m...

Windows システムの MySQL が中国語を入力および表示できない問題の解決方法

ステップ 1: メモ帳を使用して、MySQL インストール ディレクトリの「my.ini」ファイルを...

ab ツールを使用してサーバー上で API ストレス テストを実行します。

目次1 システムスループットの簡単な紹介2 試験方法2.1 クライアントテストツール2.1.1 GE...

MySql 8.0.11-Winxp64 (無料インストール版) ​​設定チュートリアル

1. インストールディレクトリにzipパッケージを解凍します。まず、mysql-8.0.11-win...

MySql8.0.19 インストールピットレコードを共有する

前回の記事ではMySql8.0.19のインストール手順を紹介しました。必要な方はクリックしてご覧くだ...

Nginx ログのカスタマイズとログ バッファの有効化の詳細な説明

序文ウェブサイトのアクセス元をカウントしたい場合は、PHP を使用して情報を取得してデータベースに記...

VMware + Ubuntu18.04 による Hadoop クラスタ環境の構築に関するグラフィック チュートリアル

目次序文VMware クローン仮想マシン (準備、3 台の仮想マシンのクローン、1 台のマスター、2...