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

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

推薦する

MySQLインデックスベースのストレステストの実装

1. データベースデータをシミュレートする1-1 データベースとテーブルスクリプトを作成する - v...

M1 ProチップでVueプロジェクトを開始する方法

目次導入Homebrewをインストールするnvmをインストールするノードをインストールするインストー...

Linux コマンド sort、uniq、tr ツールの詳細な説明

並べ替えツールLinux の sort コマンドは、テキスト ファイルの内容を並べ替えるために使用さ...

Linux での MySQL 5.7.17 の最新安定バージョンのインストール チュートリアル

ソースコードを通じて Linux に最新の安定バージョンの MySQL をインストールします: my...

ウェブデザインの達人がよく使うレスポンシブフレームワークを共有する(要約)

この記事では、Web デザインの達人がよく使用するレスポンシブ フレームワーク (概要) を紹介し、...

WEB2.0の片手ルール

<br />前回のCSSに関する記事は、多くの人にあまり理解されませんでした。そのため、...

フィルターを使用して画像に透明な CSS を書く方法

フィルターを使用して画像に透明な CSS を書く方法コードをコピーコードは次のとおりです。 html...

Docker Swarm を使用して分散クローラー クラスターを構築する例

クローラーの開発プロセス中に、クローラーを複数のサーバーに展開する必要がある状況に遭遇したことがある...

vue cli で env を使用するガイド

目次序文紹介-公式設定例序文vueCli を使用してプロジェクトを開発したことのある方は、少しがっか...

Nginx サービス クイック スタート チュートリアル

目次1. Nginx の紹介1. Nginx とは何ですか? 2. Nginx を使用する理由3. ...

div の水平レイアウトを両側に揃える 3 つの方法

この記事では、主に、div の水平レイアウトの両側の配置を実装する 3 つの方法を紹介し、それらを共...

CSS ブラウザ互換性の問題に対する 4 つの解決策

フロントエンドは、技術が急速に進化するだけでなく、知っておくべき事柄が多すぎるという理由で大変な仕事...

Centos7 に Nginx 統合 Lua サンプル コードをインストール

序文私が使用しているパソコンはMacで、OSはmacOS Mojaveです。コンピュータに仮想マシン...

モバイルデバイス用のメタタグ設定の完全なリスト

序文以前フロントエンドを勉強していたとき、メタタグに対する私の理解はこの一文だけでした。 <メ...

xshellリモート接続の自動切断の問題の解決方法の詳細な説明

xshell を使用したリモート接続システムの自動切断の問題の解決策: 1. サーバー構成サーバーは...