今回は、JS での暗黙的変換の使用についていくつかまとめてみます。JS での暗黙的変換を使用する際の 注意事項 について、実際のケースを見てみましょう。
js 内の異なる データ型 間の比較と変換のルールは次のとおりです:
1. オブジェクトとブール値の比較
オブジェクトとブール値を比較する場合、オブジェクトはまず文字列に変換され、次に数値に変換され、ブール値は直接数値に変換されます
[] == true; //false []转换为字符串'',然后转换为数字0,true转换为数字1,所以为false
2. オブジェクトと文字列の比較
オブジェクトと文字列を比較する場合、オブジェクトは文字列に変換されてから 2 つが比較されます。
りー3. オブジェクトと数値の比較
オブジェクトを数値と比較する場合、オブジェクトはまず文字列に変換され、次に数値に変換されて、その数値と比較されます。
りー4. 文字列と数値の比較
文字列と数値を比較する場合、文字列は数値に変換されてから 2 つが比較されます。
りー5. 文字列とブール値の比較
文字列とブール値を比較する場合、両方を数値に変換して比較します。
りー6. ブール値と数値の比較
ブール値を数値と比較する場合、ブール値は数値に変換され、2 つが比較されます。
[1,2,3] == '1,2,3' // true [1,2,3]转化为'1,2,3',然后和'1,2,3', so结果为true;
2 つの型を比較する場合、それらが同じ型でない場合は、図に示すように、対応する 型変換 を実行します。たとえば、オブジェクトがブール型で比較される場合、オブジェクト => 文字列 => 数値ブール = >番号。
さらに、「特別な注意」が必要なものをいくつか見てみましょう。
興味深い質問を見てみましょう
rreee
これら 2 つの結果は両方とも true です。最初の結果は、object=> string=> value 0 が数値 0 に変換されます。2 番目の結果は、先頭に ! が付いています。つまり、ブール値に直接変換してからそれを否定します。ブール値に変換すると、空の文字列 ('')、NaN、0、null、および未定義はすべて true を返します。 => true 否定は false なので、[] == false になります。
[1] == 1; // true `对象先转换为字符串再转换为数字,二者再比较 [1] => '1' => 1 所以结果为true私はかつてそのようなコードを見たことがあります:
、信じられますか、そのとき赤ちゃんは怖がりました。 (!(~+[])+{})[--[~+""][+[]]*[~+[]]+~~!+[]]+({}+[])[[~!+[]*~+[]]] = sb
7. JS データ型: 数値、ブール値、文字列、未定義、Null、シンボル (es6 で新たに定義)、およびオブジェクト (注: 配列は特別なオブジェクトです)
typeof によって返される 7 つの型: 数値、ブール文字列、オブジェクト、未定義のオブジェクト関数 MDN では、JavaScript を次のように紹介しています。JavaScript は、型付けが弱い、または動的言語です。つまり、変数の型を事前に宣言する必要はなく、プログラムの実行中に型が自動的に決定されます。これは、同じ変数を使用して異なるタイプのデータを保持できることも意味します8. 一般的な暗黙的な変換を見てみましょう:
基本型: 演算子(+,-,*,/,%)操作時の変換種類 ^ ^ ^ 「+」演算子: ^ ^ ^ ^ 概要: プラス記号演算子を使用する場合、String およびその他の型は String に変換され、それ以外の場合は Number 型に変換されます。 注: 未定義は「NaN」として Number に変換され、NaN に加算される数値は変換されます。 be は NaN です。 他の演算子を使用すると、基本型は文字を含む String 型に変換されます ('1a'、'a1' など)。これは、未定義と同じ NaN に変換されます。 ヒント: (1) NaN は、それ自体を含め、どの値とも等しくないため、値が NaN であるかどうかを判断するには、「! ==」を使用します。 ^ ^ ^ ^ (2) ブール型 false への変換には、null、0、''、未定義、NaN、false が含まれます ^ ˜(3)number() 与 parseInt() 都可以将对象转化为Number类型,Number函数要比parseInt函数严格很多。基本上,只要有一个字符无法转成数值,整个字符串就会被转为NaN。
Object类型
当object与基本类型运算时:
var obj = { toString: function(){ return 6; }, valueOf: function(){ return 5; } }; var obj1 = { valueOf: function(){ return 'a'; }, toString: function(){ return 'b'; } };
总结: Number类型会先调用valueOf(), String类型会先调用toString(), 如果结果是原始值,则返回原始值,否则继续用toString 或 valueOf(),继续计算,如果结果还不是原始值,则抛出一个类型错误;
为什么 {} + [] = 0 ? 因为 javascript在运行时, 将 第一次{} 认为是空的代码块,所以就相当于 +[] = 0. 还有 {} +5 = 5, 同理。
总结:
1. 类型错误有可能会被类型转换所隐藏。
2. “+”既可以表示字符串连接,又可以表示算术加,这取决于它的操作数,如果有一个为字符串的,那么,就是字符串连接了。
3. 对象通过valueOf方法,把自己转换成数字,通过toString方法,把自己转换成字符串。
4.具有valueOf方法的对象,应该定义一个相应的toString方法,用来返回相等的数字的字符串形式。
5.检测一些未定义的变量时,应该使用typeOf或者与undefined作比较,而不应该直接用真值运算。
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
以上がJS における暗黙的な変換の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

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

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

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

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません
