JavaScript での強制型変換の概要
この記事ではJavaScriptにおける強制型変換の方法を紹介しますので、参考になると思いますので、困っている方は参考にしていただければ幸いです。
JavaScript プリミティブ
JavaScript は一連の基本ユニットに基づいて構築されています。文字列や数値など、その一部はすでに馴染みのあるものです。
var greet = "Hello"; var year = 89;
文字列と数値は、言語のいわゆる プリミティブの一部です。完全なリストは次のとおりです:
- String
- Number
- Boolean
- Null
- 未定義
- Object
- シンボル (ES6 で追加されました。ここでは紹介されていません)
ブール値は、true または false の値を表すために使用されます。 null は意図的に割り当てられていません。通常、バインディングが完了し、後で意味のあるコンテンツが設定されることを示すために変数に割り当てられます。
var maybe = null;
次に unknown が来ます。これは、変数がまだアタッチされていないことを意味します。
var name; console.log(name) undefined
null と unknown は非常によく似ていますが、これらは 2 つの完全に異なるエンティティです。開発者はどれを使用するべきかまだ迷っています。
JavaScript インスタンスのタイプを判別したい場合は、typeof
演算子を使用できます。文字列:
typeof "alex" > "string"
と数値:
typeof 9 > "number"
ブール値の場合:
typeof false > "boolean"
未定義:
typeof undefined > "undefined"
および null :
typeof null > "object"
結果は驚くべきものでした! null はオブジェクトのように見えますが、実際には JavaScript の歴史的なバグで、JavaScript 言語が誕生したときから存在しています。 これらの問題のため、JavaScript は常に悪い評判を持っていました 。しかし、これはほんの始まりにすぎません。
ストレンジャーシングス
JavaScript では、2 つの型の間で変換するときに、いくつかの奇妙なルールがあります。背景情報をいくつか説明させてください。まずはPythonを使った例を見てみましょう。 Python で次のコマンドを実行すると:
'hello' + 89
明確なエラーが表示されます:
TypeError: can only concatenate str (**not** "int") to str
JavaScript では限界があります:
'hello' + 89
上記の事実:
"hello89"
文字列に配列を追加しようとすると、さらに奇妙になります:
'hello' + []
は
1. 'hello'
と
1. 'hello' + [89]
を取得します。驚き:
1. "hello89"
この変換の背後には何らかのロジックがあるようです。より多くの要素が存在する配列でも機能します:
1. 'hello' + [89, 150.156, 'mike']
Get:
1. "hello89,150.156,mike"
これらの 2 行の JavaScript は、Java プログラマを暴走させるのに十分です。しかし、この動作は JavaScript では 100% 理にかなっています。したがって、この 暗黙的な変換 (強制型変換 とも呼ばれます) は、検討する価値があります。
数値が文字列になるとき
一部のプログラミング言語には、型変換と呼ばれる概念があります。これは、数値またはインスタンスを別の数値またはインスタンスに変換したい場合を意味します。型の場合、 を に明示的に変換する必要があります。 JavaScript でも動作します。次の例を参照してください:
var greet = "Hello"; var year = 89;
明示的に変換したい場合は、コードで意図を表現できます:
var greet = "Hello"; var year = 89; var yearString = year.toString()
または、次のようにします:
var greet = "Hello"; var year = 89; var yearString = String(year)
その後、連結できます。 2 つの変数:
greet + yearString;
しかし、JavaScript には、JavaScript エンジンによって提供される 暗黙的変換 と呼ばれる微妙なメカニズムがあります。この言語では、数値や文字列を追加することができます:
'hello' + 89
は次のようになります:
"hello89"
しかし、この変換の背後にあるロジックは何でしょうか? JavaScript の addition 演算子
は、少なくとも 1 つが文字列用のオペランドである場合、その 2 つのオペランドのいずれかを文字列に自動的に変換することを知って驚かれるかもしれません。 !
配列とオブジェクトも同じ変換の対象になります:
'hello' + [89, 150.156, 'mike']
"hello89,150.156,mike"
'hello' + { name: "Jacopo" }
String({ name: "Jacopo" })
"[object Object]"
1. 'hello' + { name: "Jacopo" }
1. "hello[object Object]"
toString() という名前のメソッドがあり、一部のメソッドは
Object.prototype.toString によって提供されます。
配列などの一部の型は、メソッドの呼び出し時に値を文字列に変換するカスタム バージョンの
toString() を実装します。たとえば、
Array.prototype.toString は
Object.toString() (メソッド シャドウイングとも呼ばれます) をオーバーライドします。
但是当你在普通的 JavaScript 对象上调用 toString()
时,引擎会给出“[object Object]”,因为 Object.toString()
的默认行为是由实体类型(在这种情况下为Object)返回字符串 object 。
现在让我们把注意力集中在 JavaScript 比较运算符上,它们与算术运算符一样奇怪。
等于还是不等于?
JavaScript 中有两个主要的比较运算符。
第一个我们称之为“弱比较”。这是抽象比较运算符(双等号):==
。
另一个是“强比较”,可以通过三等号进行识别:===
也称为严格比较运算符。它们两者的行为方式完全不同。
来看一些例子。首先,如果我们将两个字符串与两个运算符进行比较,我们得到相同的结果
"hello" == "hello" > true "hello" === "hello" > true
看上去一切都还好。
现在尝试比较两种不同的类型,数字和字符串。首先是“强比较”:
1. "1" === 1 2. false
这说得通!字符串“1”与数字1是不同的。但是“弱比较”会发生什么?
1. "1" == 1 2. true
居然是true!它没有任何意义,除非这种行为与我们之前看到的隐式转换有关。
如果适用相同的规则怎么办?没错! ECMAScript spec 再次罢工。结果抽象比较运算符在比较它们之前在类型之间进行自动转换。这是规范的摘要:
比较 x == y 执行如下:如果 x 是 String 且 y 是Number,则返回比较结果 ToNumber(x)== y
规范说:如果第一个操作数是一个字符串,第二个操作数是一个数字,那么将第一个操作数转换为数字。有趣。
JavaScript 规范充满了这个疯狂的规则,我强烈鼓励大家对它深入挖掘。
在此期间除非你有充分的理由否则在 JavaScript 代码中避免使用抽象比较运算符。你以后会感谢自己的。
那么“强势比较”怎么样?规范中的说 严格相等比较在把值与三等 ===
进行比较之前没有进行自动转换。在代码中使用严格相等比较可以避免愚蠢的 bug。
总结
JavaScript 中有七个构建块,即 String,Number,Boolean,Null,Undefined,Object 和 Symbol。这些类型被称为基元。
JavaScript 开发人员可以使用算术和比较运算符来操作这些类型。但是我们要特别注意加法运算符 +
和抽象比较运算符 ==
,它本质上倾向于在类型之间进行转换。
JavaScript 中的隐式转换称为强制类型转换,并在 ECMAScript 规范中定义。无论什么时候你的代码都要使用严格的比较运算符 ===
而不是 ==
。
作为最佳实践,当你打算在两种类型之间进行转换时,请务必明确操作。JavaScript 有一堆内置对象,它们反映了原始类型:String
,Number
,Boolean
。这些内置类型可用于在不同类型之间进行显式转换。
以上がJavaScript での強制型変換の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









PHP と Vue: フロントエンド開発ツールの完璧な組み合わせ 今日のインターネットの急速な発展の時代において、フロントエンド開発はますます重要になっています。 Web サイトやアプリケーションのエクスペリエンスに対するユーザーの要求がますます高まっているため、フロントエンド開発者は、より効率的で柔軟なツールを使用して、応答性の高いインタラクティブなインターフェイスを作成する必要があります。フロントエンド開発の分野における 2 つの重要なテクノロジーである PHP と Vue.js は、組み合わせることで完璧なツールと見なされます。この記事では、PHP と Vue の組み合わせと、読者がこれら 2 つをよりよく理解し、適用できるようにするための詳細なコード例について説明します。

フロントエンド開発のインタビューでは、HTML/CSS の基本、JavaScript の基本、フレームワークとライブラリ、プロジェクトの経験、アルゴリズムとデータ構造、パフォーマンスの最適化、クロスドメイン リクエスト、フロントエンド エンジニアリング、デザインパターン、新しいテクノロジーとトレンド。面接官の質問は、候補者の技術スキル、プロジェクトの経験、業界のトレンドの理解を評価するように設計されています。したがって、候補者はこれらの分野で自分の能力と専門知識を証明するために十分な準備をしておく必要があります。

関数内型変換を使用すると、ある型のデータを別の型に変換できるため、関数の機能が拡張されます。 type_name:=variable.(type) という構文を使用します。たとえば、strconv.Atoi 関数を使用すると、文字列を数値に変換し、変換が失敗した場合にエラーを処理できます。

JavaScript チュートリアル: HTTP ステータス コードを取得する方法、特定のコード例が必要です 序文: Web 開発では、サーバーとのデータ対話が頻繁に発生します。サーバーと通信するとき、多くの場合、返された HTTP ステータス コードを取得して操作が成功したかどうかを判断し、さまざまなステータス コードに基づいて対応する処理を実行する必要があります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法を説明し、いくつかの実用的なコード例を示します。 XMLHttpRequestの使用

Django は、迅速な開発とクリーンなメソッドを重視した Python で書かれた Web アプリケーション フレームワークです。 Django は Web フレームワークですが、Django がフロントエンドなのかバックエンドなのかという質問に答えるには、フロントエンドとバックエンドの概念を深く理解する必要があります。フロントエンドはユーザーが直接対話するインターフェイスを指し、バックエンドはサーバー側プログラムを指し、HTTP プロトコルを通じてデータと対話します。フロントエンドとバックエンドが分離されている場合、フロントエンドとバックエンドのプログラムをそれぞれ独立して開発して、ビジネス ロジックとインタラクティブ効果、およびデータ交換を実装できます。

さまざまな種類の暗黙的な型変換と、プログラミングにおけるその役割を調べます。 はじめに: プログラミングでは、さまざまな種類のデータを処理する必要があることがよくあります。場合によっては、特定の操作を実行したり、特定の要件を満たすために、あるデータ型を別のデータ型に変換する必要があります。このプロセスでは、暗黙的な型変換が非常に重要な概念になります。暗黙的な型変換とは、変換型を明示的に指定せずに、プログラミング言語が自動的にデータ型変換を実行するプロセスを指します。この記事では、さまざまな種類の暗黙的な型変換と、プログラミングにおけるその役割について説明します。

Go 言語は、高速で効率的なプログラミング言語として、バックエンド開発の分野で広く普及しています。ただし、Go 言語をフロントエンド開発と結びつける人はほとんどいません。実際、フロントエンド開発に Go 言語を使用すると、効率が向上するだけでなく、開発者に新たな視野をもたらすことができます。この記事では、フロントエンド開発に Go 言語を使用する可能性を探り、読者がこの分野をよりよく理解できるように具体的なコード例を示します。従来のフロントエンド開発では、ユーザー インターフェイスの構築に JavaScript、HTML、CSS がよく使用されます。

Golang とフロントエンド テクノロジーの組み合わせ: Golang がフロントエンド分野でどのような役割を果たしているかを調べるには、具体的なコード例が必要です。インターネットとモバイル アプリケーションの急速な発展に伴い、フロントエンド テクノロジーの重要性がますます高まっています。この分野では、強力なバックエンド プログラミング言語としての Golang も重要な役割を果たします。この記事では、Golang がどのようにフロントエンド テクノロジーと組み合わされるかを検討し、具体的なコード例を通じてフロントエンド分野での可能性を実証します。フロントエンド分野における Golang の役割は、効率的で簡潔かつ学びやすいものとしてです。
