検索
ホームページウェブフロントエンドフロントエンドQ&AJavaScriptの型変換(詳しい説明と例)

この記事では、JavaScript の型変換に関する知識を提供します。値をプリミティブ値に変換、数値に変換、文字列に変換することは、エンジン内の 3 つの抽象操作に対応します: ToPrimitive() 、 ToNumber() 、 ToString() , 皆様のお役に立てれば幸いです。

JavaScriptの型変換(詳しい説明と例)

#JavaScript の加算ルール

JavaScript では、加算のルールは実際には非常に単純です。状況は 2 つだけ:

  • 数字を数字に追加する

  • 文字列を文字列に追加する

その他すべて値のタイプは、これら 2 つのタイプの値に自動的に変換されます。

JavaScript には、2 つのタイプの値があります:

  • 元の値は次のとおりです。未定義、null、ブール、数値、文字列、シンボル

  • オブジェクト値: 他のすべての値は、配列 (配列) や関数を含むオブジェクト型の値です

型変換

加算演算子は、次の 3 つの型変換をトリガーします。値を、対応するプリミティブ値、数値、文字列に変換します。 JavaScript エンジン内の 3 つの抽象操作: ToPrimitive()、ToNumber()、ToString()

ToPrimitive() を通じて値を元の値に変換します。

ToPrimitive(input, PreferredType?)

オプションのパラメータ PreferredType は、変換設定を表すだけの Number または String にすることができ、変換結果は必ずしもこのパラメータが指す型である必要はありませんが、変換結果はプリミティブである必要がありますPreferredType が Number としてマークされている場合、入力値を変換するために次の操作が実行されます (§9.1):

    #入力値がすでにプリミティブ値である場合は、それを返します
  • それ以外の場合、入力値がオブジェクトの場合は、オブジェクトの valueOf() メソッドを呼び出します。valueOf() メソッドの戻り値がプリミティブ値の場合は、このプリミティブを返します。
  • それ以外の場合は、このオブジェクトの toString() メソッドを呼び出します。toString() メソッドの戻り値がプリミティブ値の場合は、元の値が返されます。
  • それ以外の場合は、TypeError 例外がスローされます。
  • PreferredType が String としてマークされている場合、変換操作 2 番目と 3 番目のステップの順序は次のようになります。 PreferredType パラメータがない場合、PreferredType の値は次の規則に従って自動的に設定されます: 日付型オブジェクトは String に設定され、その他の型の値は Number に設定されます。
##ToNumber() を通じて値を数値に変換します。

入力値が object の場合、ToPrimitive( obj, Number) が最初に呼び出されてオブジェクトをプリミティブ値に変換し、次に ToNumber() が呼び出されてプリミティブ値を数値に変換します。値を文字列に変換します

JavaScriptの型変換(詳しい説明と例)

#入力値がオブジェクトの場合、最初に ToPrimitive(obj, String) が呼び出され、オブジェクトが次のように変換されます。元の値を取得し、ToString() を呼び出して元の値を文字列に変換します。 function (コンストラクターとしてではなく) 呼び出される場合、ToNumber() オペレーションはエンジン内で内部的に呼び出されます。

var obj = {
    valueOf: function () {
        console.log("valueOf");
        return {}; // 没有返回原始值
    },
    toString: function () {
        console.log("toString");
        return {}; // 没有返回原始值
    }
}
Addition

JavaScriptの型変換(詳しい説明と例)

Number(obj)
// output
valueOf
toString
Uncaught TypeError: Cannot convert object to primitive value
String(obj)
// output
toString
valueOf
Uncaught TypeError: Cannot convert object to primitive value

計算中 この式を表現するときの操作手順は次のとおりです。

2 つのオペランドを元の値に変換します (以下は数学的表記法であり、JavaScript コードではありません):

    value1 + value2

PreferredType は省略されているため、Date 型の値は String を使用し、他の型の値は Number を使用します。

If prim1 またはprim2 が文字列である場合、もう一方を文字列に変換し、2 つの文字列連結演算の結果を返します;

それ以外の場合は、prim1 と prim2 の両方を数値型に変換し、それらの合計を返します。

  • [] []

出力: ''
  • [] は次のように変換されます。プリミティブ値の場合は、まず valueOf() メソッドを試し、配列自体を返します (これ):

        prim1 := ToPrimitive(value1)
        prim2 := ToPrimitive(value2)

    このような結果はプリミティブ値ではないため、もう一度 toString() メソッドを呼び出して空の文字列を返します。 (これはプリミティブ値です)。したがって、[] [] の結果は、実際には 2 つの空の文字列を連結したものになります。
  • > var arr = [];
    > arr.valueOf() === arr
    true
  • {} {}

出力: NaN

JavaScript エンジンは、最初の {} を空のコード ブロックとして解釈し、無視します。

ここでのプラス記号は、ではありません。加算を表す二項演算子ですが、その後のオペランドを数値に変換する単項演算子であり、Number() 関数とまったく同じです。例えば:###
+{}
Number({})
Number({}.toString())  // 因为{}.valueOf()不是原始值
Number("[object Object]")
NaN
> {} + []
0
  • {} 忽略

  • +[] = Number([]) = Number([].toString()) = Number("") = 0

有趣的是,Node.js的REPL在解析类似的输入时,与Firefox和Chrome(和Node.js一样使用V8引擎)的解析结果不同.下面的输入会被解析成一个表达式,结果更符合我们的预料:

> {} + {}
'[object Object][object Object]'
> {} + []
'[object Object]'

总结

对象.valueOf() === 对象

数组对象.toString() === 数组对象.join()

对象.toString() === "[object Object]"

Javacript 中 + 号工作:

  • 数字 + 数字

  • 字符串 + 字符串

【相关推荐:javascript学习教程

以上がJavaScriptの型変換(詳しい説明と例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は掘金で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Reactを使用したフロントエンド開発:利点とテクニックReactを使用したフロントエンド開発:利点とテクニックApr 17, 2025 am 12:25 AM

Reactの利点は、その柔軟性と効率性であり、これは以下に反映されています。1)コンポーネントベースの設計により、コードの再利用性が向上します。 2)仮想DOMテクノロジーは、特に大量のデータ更新を処理する場合、パフォーマンスを最適化します。 3)リッチエコシステムは、多数のサードパーティライブラリとツールを提供します。 Reactがどのように機能し、例を使用するかを理解することにより、そのコアコンセプトとベストプラクティスをマスターして、効率的で保守可能なユーザーインターフェイスを構築できます。

React vs.他のフレームワーク:比較と対照オプションReact vs.他のフレームワーク:比較と対照オプションApr 17, 2025 am 12:23 AM

Reactは、大規模で複雑なアプリケーションに適したユーザーインターフェイスを構築するためのJavaScriptライブラリです。 1. Reactのコアはコンポーネント化と仮想DOMであり、UIレンダリングパフォーマンスを向上させます。 2。Vueと比較して、Reactはより柔軟性がありますが、大規模なプロジェクトに適した急な学習曲線があります。 3。Angularと比較して、Reactはより軽く、コミュニティの生態学に依存し、柔軟性を必要とするプロジェクトに適しています。

HTMLでのDemyStifice React:すべてがどのように機能するかHTMLでのDemyStifice React:すべてがどのように機能するかApr 17, 2025 am 12:21 AM

Reactは、仮想Domを介してHTMLで動作します。 1)ReactはJSX構文を使用してHTMLのような構造を書きます。 2)仮想DOM管理UIアップデート、拡散アルゴリズムによる効率的なレンダリング。 3)Reactdom.render()を使用して、コンポーネントを実際のDOMにレンダリングします。 4)最適化とベストプラクティスには、React.MEMOとコンポーネントの分割を使用して、パフォーマンスと保守性を向上させることが含まれます。

対応中の反応:実際のアプリケーションの例対応中の反応:実際のアプリケーションの例Apr 17, 2025 am 12:20 AM

Reactは、eコマース、ソーシャルメディア、データの視覚化で広く使用されています。 1)電子商取引プラットフォームは、Reactを使用してショッピングカートコンポーネントを構築し、UseStateを使用して状態を管理し、イベントを処理するためにオンクリックし、機能をマップしてリストをレンダリングします。 2)ソーシャルメディアアプリケーションは、Effectを使用してAPIと対話し、動的なコンテンツを表示します。 3)データの視覚化は、React-ChartJS-2ライブラリを使用してチャートをレンダリングし、コンポーネント設計はアプリケーションを簡単に埋め込むことができます。

Reactを使用したフロントエンドアーキテクチャ:ベストプラクティスReactを使用したフロントエンドアーキテクチャ:ベストプラクティスApr 17, 2025 am 12:10 AM

Reactのベストプラクティスには、フロントエンドアーキテクチャが含まれます。1。コンポーネントの設計と再利用:設計単一の責任、理解しやすく、コンポーネントをテストして高い再利用を実現します。 2。状態管理:UseState、usereducer、contextapi、またはredux/mobxを使用して、過度の複雑さを避けるために状態を管理します。 3。パフォーマンスの最適化:raceme.memo、usecallback、usememo、その他の方法を介してパフォーマンスを最適化して、バランスポイントを見つけます。 4。コード組織とモジュール性:機能モジュールに従ってコードを整理して、管理可能性と保守性を向上させます。 5。テストと品質保証:コードの品質と信頼性を確保するためのJestとReactTestingLibraryを使用したテスト

HTML内の反応:動的WebページのJavaScriptを統合しますHTML内の反応:動的WebページのJavaScriptを統合しますApr 16, 2025 am 12:06 AM

HTMLにReactを統合するには、次の手順に従ってください。1。HTMLファイルにReactとReactdomを導入します。 2。反応成分を定義します。 3. ReactDomを使用してコンポーネントをHTML要素にレンダリングします。これらの手順を通じて、静的HTMLページは動的でインタラクティブな体験に変換できます。

Reactの利点:パフォーマンス、再利用性などReactの利点:パフォーマンス、再利用性などApr 15, 2025 am 12:05 AM

Reactの人気には、パフォーマンスの最適化、コンポーネントの再利用、豊富なエコシステムが含まれます。 1.パフォーマンスの最適化は、仮想DOMおよび拡散メカニズムを介して効率的な更新を実現します。 2。コンポーネントの再利用は、再利用可能なコンポーネントによって重複コードを削減します。 3.リッチなエコシステムと一方向のデータフローは、開発エクスペリエンスを向上させます。

反応:動的でインタラクティブなユーザーインターフェイスを作成します反応:動的でインタラクティブなユーザーインターフェイスを作成しますApr 14, 2025 am 12:08 AM

Reactは、動的でインタラクティブなユーザーインターフェイスを構築するための選択ツールです。 1)コンポーネント化とJSXは、UIを分割して簡単に再利用します。 2)国家管理は、UIの更新をトリガーするためにUseStateフックを通じて実装されます。 3)イベント処理メカニズムは、ユーザーの相互作用に応答し、ユーザーエクスペリエンスを向上させます。

See all articles

ホット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

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

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター