この記事では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]"やめて!これは何ですか? JavaScript における [オブジェクト オブジェクト] の意味は何ですか? 「[object Object]」は、JavaScript の最も一般的な「癖」の 1 つです。 ほぼすべての JavaScript インスタンスには
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 サイトの他の関連記事を参照してください。

转换方法:1、利用strconv包中的Atoi()函数,可将字符串类型的整数转换为int类型,语法“strconv.Atoi(string)”;2、利用strconv包中的ParseInt()函数,可返回字符串表示的整数值(接受正负号),语法“strconv.ParseInt(string,10,64)”。

如何解决C++运行时错误:'invalidtypeconversion'?在C++编程过程中,我们经常会遇到各种编译时和运行时错误。其中一个常见的运行时错误是'invalidtypeconversion'(无效的类型转换)错误。当我们把一个数据类型转换为另一个不兼容的数据类型时,就会触发此错误。本文将介绍一些常见的造成此错误的原因,以及如何解决这个错

C++作为一门强类型语言,在进行数据类型转换的时候需要特别注意,否则编译器会报错。其中较常见的错误之一便是“无效的类型转换”。本文将会讲解这种错误出现的原因、如何进行类型转换以及如何避免这种错误的发生。一、错误原因数据类型不匹配C++中有一些数据类型是无法直接进行转换的。例如,不能将一个字符型变量直接转换为整型变量,或者将一个浮点型变量直接转换为布尔型变量。

函数中类型转换允许将一种类型的数据转换为另一种类型,从而扩展函数的功能。使用语法:type_name:=variable.(type)。例如,可使用strconv.Atoi函数将字符串转换为数字,并处理转换失败的错误。

探索隐式类型转换的不同类型及其在编程中的作用引言:在编程中,我们经常需要处理不同类型的数据。有时候,我们需要将一种数据类型转换为另一种类型以便进行特定操作或满足特定要求。在这个过程中,隐式类型转换是一个非常重要的概念。隐式类型转换指的是在不需要显式指定转换类型的情况下,编程语言会自动进行数据类型转换的过程。本文将探索隐式类型转换的不同类型及其在编程中的作用,

转换方法:1、使用Itoa()函数,语法“strconv.Itoa(num)”;2、使用FormatInt()函数,可将int型数据转换成指定进制并以字符串的形式返回,语法“strconv.FormatInt(num,10)”。

在Java开发中,我们经常会遇到类型转换的问题。当我们把一个数据类型的值转换成另一个数据类型的值时,如果转换不正确,就会抛出java.lang.NumberFormatException异常。本文将介绍这个异常的原因和如何避免它的发生。java.lang.NumberFormatException异常原因java.lang.NumberFormatExcep

Go语言允许函数返回值强制类型转换,其语法格式为value:=variable.(targetType)。强制类型转换可用于将interface{}类型的值转换为特定类型,如map[string]string。注意事项包括类型兼容性、值验证以及谨慎使用。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

Dreamweaver Mac版
ビジュアル Web 開発ツール

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

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

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

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

ホットトピック



