JavaScript의 강제 유형 변환 소개
이 기사는 JavaScript의 강제 유형 변환 방법에 대한 소개를 제공합니다. 이는 특정 참조 가치가 있으므로 도움이 될 수 있습니다.
JavaScript Primitives
JavaScript는 일련의 기본 단위를 기반으로 구축되었습니다. 문자열과 숫자처럼 그 중 일부는 이미 여러분에게 익숙할 것입니다.
var greet = "Hello"; var year = 89;
문자열과 숫자는 언어의 소위 "원시형"의 일부입니다. 전체 목록은 다음과 같습니다.
- String
- Number
- Boolean
- Null
- Undefine
- Object
- Symbol(ES6에 추가되었으며 여기에 소개되지 않음)
부울 값은 가능한 true 또는 잘못된 값. null은 의도적으로 할당되지 않았습니다. 일반적으로 바인딩이 완료되었으며 나중에 의미 있는 콘텐츠로 채워질 것임을 나타내기 위해 변수에 할당됩니다.
var maybe = null;
그리고 undefine이 있는데, 이는 변수가 아직 연결되지 않았음을 의미합니다.
var name; console.log(name) undefined
null과 undefine은 매우 비슷해 보이지만 매우 다른 두 개체이며 많은 개발자는 여전히 어떤 것을 사용해야 할지 확신하지 못합니다.
JavaScript 인스턴스의 유형을 확인하려면 typeof
연산자를 사용할 수 있습니다. 문자열로 시도해 봅시다: typeof
运算符。让我们用字符串尝试一下:
typeof "alex" > "string"
还有数字:
typeof 9 > "number"
用于布尔值:
typeof false > "boolean"
undefined:
typeof undefined > "undefined"
还有 null:
typeof null > "object"
结果令人惊讶! null 看起来像一个对象,但实际上它是 JavaScript 中的一个历史性错误,自语言诞生就躺在那里了。 由于这些问题,JavaScript 一直声名狼借。但这仅仅是个开始。
陌生的事情
在 JavaScript 中,在两种类型之间进行转换时有一些奇怪的规则。让我给你一些背景信息。先用 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"
看起来这种转换背后存在某种逻辑。它甚至适用于存在更多元素的 array :
1. 'hello' + [89, 150.156, 'mike']
得到:
1. "hello89,150.156,mike"
这两行 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)
然后我可以连接两个变量:
greet + yearString;
但是在 JavaScript 中有一种被称为隐式转换的微妙机制,由 JavaScript 引擎提供。该语言不会阻止我们对数字和字符串进行加法操作:
'hello' + 89
会得到:
"hello89"
但是这种转换背后的逻辑是什么?你可能会惊讶地发现 JavaScript 中的加法运算符 +
会自动将两个操作数中的任何一个都转换为字符串,如果其中至少有一个是字符串的话!
你会发现更令人惊讶的是,这条规则在ECMAScript规范中一脉相承。 第11.6.1节 定义了加法运算符的行为,我在这里为你做了总结:
如果 x 是 String 或 y 是String,则返回 ToString(x),然后返回ToString(y)
这个花招只适用于数字吗?并不是。 数组和对象也会受到相同的转换:
'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] 的含义是什么?
“[object Object]” 是最常见的 JavaScript “怪癖”之一。
几乎每个 JavaScript 实例都有一个名为 toString()
的方法,有些方法是由 Object.prototype.toString
提供的。
某些类型(如数组)实现了 toString()
的自定义版本,以便在调用方法时将值转换为字符串。例如 Array.prototype.toString
会覆盖 Object.toString()
"hello" == "hello" > true "hello" === "hello" > true
1. "1" === 1 2. false
1. "1" == 1 2. true
기묘한 것들
🎜JavaScript에는 두 가지 유형을 변환할 때 몇 가지 이상한 규칙이 있습니다. 몇 가지 배경 정보를 알려 드리겠습니다. 먼저 Python을 사용하는 예를 들어보겠습니다. Python에서 다음 명령을 실행하면 🎜rrreee🎜라는 명확한 오류가 발생합니다. 🎜rrreee🎜 그리고 JavaScript에서는 한계가 없습니다. 🎜rrreee🎜는 실제로 다음을 제공합니다. 🎜rrreee🎜 추가하려고 하면 문자열을 배열에 추가합니다. , 그것은 더 이상하게 보일 것입니다: 🎜rrreee🎜는 🎜rrreee🎜을 얻고 🎜rrreee🎜는 당신에게 놀라운 것을 줄 것입니다: 🎜rrreee🎜 이 변환 뒤에는 몇 가지 논리가 있는 것 같습니다. 더 많은 요소가 있는 배열에서도 작동합니다. 🎜rrreee🎜 Get: 🎜rrreee🎜 이 두 줄의 JavaScript는 Java 프로그래머를 도망치게 만들기에 충분합니다. 하지만 🎜이 동작은 JavaScript에서 100% 의미가 있습니다🎜. 따라서 이 🎜암시적 변환(캐스트🎜이라고도 함)은 살펴볼 가치가 있습니다. 🎜숫자가 문자열이 되는 경우
🎜일부 프로그래밍 언어에는 🎜유형 변환🎜이라는 개념이 있습니다. 즉, 숫자나 인스턴스를 다른 유형으로 변환하려면 다음을 수행해야 합니다. 🎜명시적 변환🎜. JavaScript에서도 작동합니다. 다음 예를 보세요. 🎜rrreee🎜 변환을 명시적으로 수행하려면 코드에 의도를 표시할 수 있습니다. 🎜rrreee🎜 또는 다음과 같이 수행합니다. 🎜rrreee🎜 그런 다음 두 변수를 연결할 수 있습니다. 🎜rrreee🎜 하지만 JavaScript에는 🎜암시적 변환🎜이라는 미묘한 메커니즘이 JavaScript 엔진에 의해 제공됩니다. 언어는 숫자와 문자열을 추가하는 것을 막지 않습니다. 🎜rrreee🎜는 다음을 얻습니다. 🎜rrreee🎜 하지만 이 변환 뒤에 있는 논리는 무엇입니까? JavaScript의 🎜덧셈 연산자🎜+
🎜가 두 피연산자 중 적어도 하나가 문자열이면 자동으로 두 피연산자 중 하나를 문자열로 변환한다는 사실을 알면 놀랄 수도 있습니다 🎜! 🎜🎜더 놀라운 점은 이 규칙이 ECMAScript 사양에서 일관된다는 점입니다. 섹션 11.6.1은 더하기 연산자의 동작을 정의합니다. 여기에 요약했습니다: 🎜x가 문자열이거나 y가 문자열이면 ToString(x)를 반환하고 ToString(y)를 반환합니다. blockquote>🎜이 트릭은 숫자에만 적용되나요? 설마. 🎜배열과 객체도 동일한 변환의 대상이 됩니다🎜: 🎜rrreee🎜는 다음을 얻습니다: 🎜rrreee🎜 그러면 다음 코드는 무엇을 얻습니까? 🎜rrreee🎜 알아보려면 객체를 문자열로 변환하여 빠르게 수행할 수 있습니다. 테스트: 🎜rrreee🎜는 다음을 얻습니다: 🎜rrreee🎜 그래서 제 느낌은: 🎜rrreee🎜가 얻을 것: 🎜rrreee🎜 중지하세요! 이게 뭔가요? 🎜JavaScript에서 [객체 객체]의 의미는 무엇인가요?
🎜"[object Object]"는 가장 일반적인 JavaScript "특이점" 중 하나입니다. 🎜🎜거의 모든 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











PHP와 Vue: 프론트엔드 개발 도구의 완벽한 조합 오늘날 인터넷이 빠르게 발전하는 시대에 프론트엔드 개발은 점점 더 중요해지고 있습니다. 사용자가 웹 사이트 및 애플리케이션 경험에 대한 요구 사항이 점점 더 높아짐에 따라 프런트 엔드 개발자는 보다 효율적이고 유연한 도구를 사용하여 반응형 및 대화형 인터페이스를 만들어야 합니다. 프론트엔드 개발 분야의 두 가지 중요한 기술인 PHP와 Vue.js는 함께 사용하면 완벽한 도구라고 볼 수 있습니다. 이 기사에서는 독자가 이 두 가지를 더 잘 이해하고 적용할 수 있도록 PHP와 Vue의 조합과 자세한 코드 예제를 살펴보겠습니다.

프론트엔드 개발 인터뷰에서 일반적인 질문은 HTML/CSS 기초, JavaScript 기초, 프레임워크 및 라이브러리, 프로젝트 경험, 알고리즘 및 데이터 구조, 성능 최적화, 크로스 도메인 요청, 프론트엔드 엔지니어링, 디자인 패턴, 새로운 기술 및 트렌드. 면접관 질문은 후보자의 기술적 능력, 프로젝트 경험, 업계 동향에 대한 이해를 평가하기 위해 고안되었습니다. 따라서 지원자는 자신의 능력과 전문성을 입증할 수 있도록 해당 분야에 대한 충분한 준비를 갖추어야 합니다.

함수 내 유형 변환을 사용하면 한 유형의 데이터를 다른 유형으로 변환하여 함수의 기능을 확장할 수 있습니다. 사용 구문: type_name:=variable.(type). 예를 들어 strconv.Atoi 함수를 사용하여 문자열을 숫자로 변환하고 변환이 실패할 경우 오류를 처리할 수 있습니다.

JavaScript 튜토리얼: HTTP 상태 코드를 얻는 방법, 특정 코드 예제가 필요합니다. 서문: 웹 개발에서는 서버와의 데이터 상호 작용이 종종 포함됩니다. 서버와 통신할 때 반환된 HTTP 상태 코드를 가져와서 작업의 성공 여부를 확인하고 다양한 상태 코드에 따라 해당 처리를 수행해야 하는 경우가 많습니다. 이 기사에서는 JavaScript를 사용하여 HTTP 상태 코드를 얻는 방법과 몇 가지 실용적인 코드 예제를 제공합니다. XMLHttpRequest 사용

Django는 빠른 개발과 깔끔한 방법을 강조하는 Python으로 작성된 웹 애플리케이션 프레임워크입니다. Django는 웹 프레임워크이지만 Django가 프런트엔드인지 백엔드인지에 대한 질문에 답하려면 프런트엔드와 백엔드의 개념에 대한 깊은 이해가 필요합니다. 프론트엔드는 사용자가 직접 상호작용하는 인터페이스를 의미하고, 백엔드는 HTTP 프로토콜을 통해 데이터와 상호작용하는 서버측 프로그램을 의미합니다. 프론트엔드와 백엔드가 분리되면 프론트엔드와 백엔드 프로그램을 독립적으로 개발하여 각각 비즈니스 로직과 인터랙티브 효과, 데이터 교환을 구현할 수 있습니다.

다양한 유형의 암시적 유형 변환과 프로그래밍에서의 역할을 살펴보세요. 소개: 프로그래밍에서는 다양한 유형의 데이터를 처리해야 하는 경우가 많습니다. 때로는 특정 작업을 수행하거나 특정 요구 사항을 충족하기 위해 한 데이터 유형을 다른 유형으로 변환해야 합니다. 이 과정에서 암시적 유형 변환은 매우 중요한 개념입니다. 암시적 유형 변환은 프로그래밍 언어가 변환 유형을 명시적으로 지정하지 않고 자동으로 데이터 유형 변환을 수행하는 프로세스를 나타냅니다. 이 기사에서는 다양한 유형의 암시적 유형 변환과 프로그래밍에서의 역할을 살펴보겠습니다.

빠르고 효율적인 프로그래밍 언어인 Go 언어는 백엔드 개발 분야에서 널리 사용됩니다. 그러나 Go 언어를 프런트엔드 개발과 연관시키는 사람은 거의 없습니다. 실제로 프런트엔드 개발에 Go 언어를 사용하면 효율성이 향상될 뿐만 아니라 개발자에게 새로운 지평을 열어줄 수도 있습니다. 이 기사에서는 프런트엔드 개발에 Go 언어를 사용할 수 있는 가능성을 살펴보고 독자가 이 영역을 더 잘 이해할 수 있도록 구체적인 코드 예제를 제공합니다. 전통적인 프런트엔드 개발에서는 사용자 인터페이스를 구축하기 위해 JavaScript, HTML, CSS를 사용하는 경우가 많습니다.

Golang과 프런트엔드 기술의 결합: Golang이 프런트엔드 분야에서 어떤 역할을 하는지 살펴보려면 구체적인 코드 예제가 필요합니다. 인터넷과 모바일 애플리케이션의 급속한 발전으로 인해 프런트엔드 기술이 점점 더 중요해지고 있습니다. 이 분야에서는 강력한 백엔드 프로그래밍 언어인 Golang도 중요한 역할을 할 수 있습니다. 이 기사에서는 Golang이 프런트엔드 기술과 어떻게 결합되는지 살펴보고 특정 코드 예제를 통해 프런트엔드 분야에서의 잠재력을 보여줍니다. 프론트엔드 분야에서 Golang의 역할은 효율적이고 간결하며 배우기 쉬운 것입니다.
