JavaScript 기술: 언박싱, 박싱 및 유형 변환
이 글에서는 언박싱(unboxing) 및 유형 변환과 관련된 문제를 주로 소개하는 javascript에 대한 관련 지식을 제공합니다. 복싱이란 기본 데이터 유형을 해당 참조 유형으로 변환하는 작업을 의미하므로 함께 살펴보시기 바랍니다. 모두에게 도움이 되십시오.
관련 권장 사항: javascript 튜토리얼
기본 데이터 유형: string
, number
, boolean
string
、number
、boolean
引用类型:object
、function
不存在的类型:undefined
String
、Number
、Boolean
分别属于string
、number
、boolean
三个原始类型的包装类型,它们的对象属于引用类型。
装箱
装箱是指把基本数据类型转换为对应的引用类型的操作,该过程主要是指string
、number
、boolean
类型的数据,通过String
、Number
、Boolean
进行包装成为引用类型数据的过程。
// 隐式装箱var s1 = 'Hello World'; var s2 = s1.substring(2);
上面第二行代码的执行步骤其实是这样的:
- 使用
new String('Hello World')
创建一个临时的实例对象; - 使用临时对象调用
substring
方法; - 将执行结果赋值给
s2
;销毁临时的实例对象。
上面的步骤转换为代码,如下:
// 显式装箱var s1 = 'Hello World'; var tempObj = new String('Hello World'); var s2 = tempObj.substring(2);
拆箱
拆箱是把引用类型转换为基本的数据类型。
关于拆箱过程中的ToPrimitive
类型转换
运算符对于两端的变量,都有一个期待类型,在javascript
中,凡是不满足运算符期待类型的变量,都会做做隐式转换。
逻辑运算符
在进行逻辑运算时,隐式转换只有一个标准:只有 null
、undefined
、 ''
、 NaN
、 0
和 false
表示 false
,其他的情况都是 true
,比如 {}
, []
。
算术运算符
如果算术运算符两端均为
number
类型的数据,直接进行计算;如果算术运算符两端存在非
number
的基本数据类型,则对非number
的运算数使用Number()
进行装箱,然后对返回值进行拆箱为number
类型,参与计算;算术运算符两端存在引用数据类型,则先对引用类型进行拆箱操作,如果结果为非
number
类型,则根据条件2
执行,否则执行条件1
。
1 - true // 0, 首先 Number(true) 转换为数字 1, 然后执行 1 - 11 - null // 1, 首先把 Number(null) 转换为数字 0, 然后执行 1 - 01 * undefined // NaN, Number(undefined) 转换为数字是 NaN , 然后执行 1 * NaN2 * ['5'] // 10, ['5'] 依照ToPrimitive规则进行拆箱会变成 '5', 然后通过 Number('5') 进行拆装箱再变成数字 5123 + {valueOf:()=>{return 10}} // 133 {valueOf:()=>{return 10}} 依照ToPrimitive规则会先调用valueOf,获得结果为10
当+
作为单目运算符出现在变量的前面时,表示的意思是将变量转换为Number
类型
+"10" // 10 同 Number("10")+['5'] // 5 ['5']依照ToPrimitive规则会变成 '5', 然后通过`Number`的拆箱操作再变成数字 5
字符串连接符
字符串连接符的符号同算术运算符的+
。
- 如果算术运算符两端均为
string
类型的数据,直接进行连接 - 如果运算符的两端存在非
string
的基本类型,则对非string
的基本类型数据使用String()
进行装箱,然后对返回值进行拆箱为基本类型,参与字符串拼接。 - 当
+
两端两端存在引用数据类型,则先对引用类型进行拆箱操作,如果结果为非string
类型,则根据条件2
执行,否则执行条件1
。
关系运算符
NaN
和其他任何类型,做任何关系运算永远返回false
(包括和他自己)。如果想判断一个变量是不是NaN
, 可以通过Number.isNaN()
来判断。-
null == undefined
比较结果是true
,除此之外,null
、undefined
和其他的(不包括它们自身)任何结果的比较值都为false
。这里是规则定义的,
참조 유형:null
为 object 的类型,可是调用valueOf
或者toString
객체
,함수
존재하지 않는 유형:
🎜문자열
,숫자
,Boolean
은 각각 세 가지 기본 유형인string
,number
및boolean
의 패키징 유형에 속합니다. code>. 개체가 참조 유형입니다.Boxing
🎜Boxing은 기본 데이터 유형을 해당 참조 유형으로 변환하는 작업을 의미합니다. 이 프로세스는 주로string
,number
, boolean 유형 데이터는String
,Number
,Boolean
을 통해 참조 유형 데이터로 패키징됩니다. 🎜🎜위 두 번째 줄 코드의 실행 단계는 실제로 다음과 같습니다. 🎜{} == !{} // false Number({}.valueOf().toString())==> NaN , 所以题目等同于 NaN == false , NaN 和 任何类型比较都是 false[] == [] // false 内存地址不同![] == 0 // true ![]==>false , 所以题目等同于 false==0 , Number(false)==>0 , 所以结果为 true
로그인 후 복사로그인 후 복사- 🎜임시 인스턴스를 생성하려면
new String('Hello World')
를 사용하세요. object ;🎜🎜임시 개체를 사용하여substring
메서드를 호출합니다. 🎜🎜실행 결과를s2
에 할당합니다. 🎜- 第一步,![] 会变成 false - 第二步,[]的valueOf是[],[]是引用类型,继续调用toString,题目变成: "" == false - 第三步,符号两端转换为Number, 得到 0==0 - 所以, 答案是 true
로그인 후 복사로그인 후 복사Unboxing
🎜Unboxing은 참조 유형을 기본 데이터 유형으로 변환하는 것입니다. 🎜🎜언박싱 과정 중 ToPrimitive 정보🎜유형 변환
🎜 연산자는 양쪽 끝에 있는 변수에 대해 예상되는 유형을 가지고 있습니다.javascript
에서는 연산자의 기대를 충족하지 못하는 모든 것이 있습니다. 유형 변수는 암시적으로 변환됩니다. 🎜논리 연산자
🎜논리 연산을 수행할 때 암시적 변환에 대한 표준은null
,정의되지 않음
,단 하나입니다. ''
,NaN
,0
및false
는false
를 나타내며, 그렇지 않으면true입니다.
(예:{}
,[]
). 🎜산술 연산자
- 🎜🎜산술 연산자의 양쪽 끝이
숫자
유형의 데이터인 경우 계산이 직접 수행됩니다. 산술 연산자의 양쪽 끝에숫자
가 아닌 기본 데이터 유형이 있는 경우Number()
를 사용하여숫자
가 아닌 피연산자를 상자에 넣습니다. 그런 다음 반환 값은number
유형으로 unboxing되어 계산에 참여합니다. 🎜🎜🎜🎜산술 연산자의 양쪽 끝에 참조 데이터 유형이 있는 경우 참조 유형이 먼저 unboxing됩니다. 결과가숫자
유형이 아닌 경우조건 2
에 따라 실행되고, 그렇지 않으면조건 1
이 실행됩니다. 🎜🎜🎜단항 연산자로 변수 앞에- 第一步,[undefined]的valueOf结果为 [undefined],然后[undefined]通过toString变成 '' ,所以题目变成 '' == false - 第二步,符号两端转换为Number, 得到 0==0 - 所以, 答案是 true !
로그인 후 복사로그인 후 복사+
가 나타나면 변수를숫자
유형🎜var a = { value: 0, valueOf: function() { this.value += 1; return this.value }};console.log(a == 1 && a == 2 && a == 3) // true
로그인 후 복사로그인 후 복사String으로 변환한다는 의미입니다. 연결 연산자
🎜문자열 연결 연산자의 기호는 산술 연산자+
와 동일합니다. 🎜- 🎜산술 연산자의 양쪽 끝이
string
유형의 데이터인 경우 직접 연결합니다. 🎜🎜연산자 양쪽 끝에string
이외의 기본 유형이 있는 경우 , 그런 다음String()
을 사용하여문자열
이 아닌 기본 유형 데이터를 상자에 넣은 다음 반환 값을 기본 유형으로 상자 해제하여 문자열 접합에 참여합니다. 🎜🎜+
양쪽 끝에 참조 데이터 유형이 있는 경우 참조 유형이 먼저 unboxing됩니다. 결과가string
유형이 아닌 경우 참조 유형이 표시됩니다.조건 2
가 실행되면 상자가 풀립니다. 그렇지 않으면조건 1
이 실행됩니다. 🎜관계 연산자
- 🎜🎜
NaN
및 기타 유형, 모든 관계 연산은 항상false
를 반환합니다(및 자신 포함). ). 변수가NaN
인지 확인하려면Number.isNaN()
을 사용하여 확인할 수 있습니다. 🎜🎜🎜🎜null == undefine
비교 결과는true
이고, 추가로null
,undefine
및 Any입니다. 다른 결과(자신 제외)의 비교 값은false
입니다. 🎜🎜이는 규칙에 의해 정의됩니다.
null
은 개체 유형입니다. 그러나valueOf
또는toString을 호출하면 구문 오류가 발생합니다. code>.여기가 바로 결과입니다. 🎜🎜🎜🎜🎜일반 상황: 🎜<ol> <li>如果算术运算符两端均为<code>number
类型的数据,直接进行计算;- 如果算术运算符两端存在非
number
的基本数据类型,则对非number
的运算数使用Number()
进行装箱,然后对返回值进行拆箱为number
类型,参与计算; - 算术运算符两端存在引用数据类型,则先对引用类型进行拆箱操作,如果结果为非
number
类型,则根据条件2
执行,否则执行条件1
。
정의되지 않음
{} == !{} // false Number({}.valueOf().toString())==> NaN , 所以题目等同于 NaN == false , NaN 和 任何类型比较都是 false[] == [] // false 内存地址不同![] == 0 // true ![]==>false , 所以题目等同于 false==0 , Number(false)==>0 , 所以结果为 true
一些题目
-
[] == ![]
- 第一步,![] 会变成 false - 第二步,[]的valueOf是[],[]是引用类型,继续调用toString,题目变成: "" == false - 第三步,符号两端转换为Number, 得到 0==0 - 所以, 答案是 true
로그인 후 복사로그인 후 복사 -
[undefined] == false
- 第一步,[undefined]的valueOf结果为 [undefined],然后[undefined]通过toString变成 '' ,所以题目变成 '' == false - 第二步,符号两端转换为Number, 得到 0==0 - 所以, 答案是 true !
로그인 후 복사로그인 후 복사 -
如何使
a==1 && a==2 && a==3
的结果为true
var a = { value: 0, valueOf: function() { this.value += 1; return this.value }};console.log(a == 1 && a == 2 && a == 3) // true
로그인 후 복사로그인 후 복사 -
如何使
a===1&&a===2&&a===3
的结果为true
// 使用 defineProperty 进行数据劫持var value = 0;Object.defineProperty(window,"a",{ get(){ return ++value; }})console.log(a===1&&a===2&&a===3) //true
로그인 후 복사 实现一个无限累加函数
柯里化实现多参累加
相关推荐:javascript学习教程
위 내용은 JavaScript 기술: 언박싱, 박싱 및 유형 변환의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

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

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

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

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

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

뜨거운 주제











WebSocket 및 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법 소개: 지속적인 기술 개발로 음성 인식 기술은 인공 지능 분야의 중요한 부분이 되었습니다. WebSocket과 JavaScript를 기반으로 한 온라인 음성 인식 시스템은 낮은 대기 시간, 실시간, 크로스 플랫폼이라는 특징을 갖고 있으며 널리 사용되는 솔루션이 되었습니다. 이 기사에서는 WebSocket과 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법을 소개합니다.

WebSocket과 JavaScript: 실시간 모니터링 시스템 구현을 위한 핵심 기술 서론: 인터넷 기술의 급속한 발전과 함께 실시간 모니터링 시스템이 다양한 분야에서 널리 활용되고 있다. 실시간 모니터링을 구현하는 핵심 기술 중 하나는 WebSocket과 JavaScript의 조합입니다. 이 기사에서는 실시간 모니터링 시스템에서 WebSocket 및 JavaScript의 적용을 소개하고 코드 예제를 제공하며 구현 원칙을 자세히 설명합니다. 1. 웹소켓 기술

JavaScript 및 WebSocket을 사용하여 실시간 온라인 주문 시스템을 구현하는 방법 소개: 인터넷의 대중화와 기술의 발전으로 점점 더 많은 레스토랑에서 온라인 주문 서비스를 제공하기 시작했습니다. 실시간 온라인 주문 시스템을 구현하기 위해 JavaScript 및 WebSocket 기술을 사용할 수 있습니다. WebSocket은 TCP 프로토콜을 기반으로 하는 전이중 통신 프로토콜로 클라이언트와 서버 간의 실시간 양방향 통신을 실현할 수 있습니다. 실시간 온라인 주문 시스템에서는 사용자가 요리를 선택하고 주문을 하면

WebSocket과 JavaScript를 사용하여 온라인 예약 시스템을 구현하는 방법 오늘날의 디지털 시대에는 점점 더 많은 기업과 서비스에서 온라인 예약 기능을 제공해야 합니다. 효율적인 실시간 온라인 예약 시스템을 구현하는 것이 중요합니다. 이 기사에서는 WebSocket과 JavaScript를 사용하여 온라인 예약 시스템을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1. WebSocket이란 무엇입니까? WebSocket은 단일 TCP 연결의 전이중 방식입니다.

JavaScript 및 WebSocket: 효율적인 실시간 일기 예보 시스템 구축 소개: 오늘날 일기 예보의 정확성은 일상 생활과 의사 결정에 매우 중요합니다. 기술이 발전함에 따라 우리는 날씨 데이터를 실시간으로 획득함으로써 보다 정확하고 신뢰할 수 있는 일기예보를 제공할 수 있습니다. 이 기사에서는 JavaScript 및 WebSocket 기술을 사용하여 효율적인 실시간 일기 예보 시스템을 구축하는 방법을 알아봅니다. 이 문서에서는 특정 코드 예제를 통해 구현 프로세스를 보여줍니다. 우리

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

사용법: JavaScript에서 insertBefore() 메서드는 DOM 트리에 새 노드를 삽입하는 데 사용됩니다. 이 방법에는 삽입할 새 노드와 참조 노드(즉, 새 노드가 삽입될 노드)라는 두 가지 매개 변수가 필요합니다.

JavaScript는 웹 개발에 널리 사용되는 프로그래밍 언어인 반면 WebSocket은 실시간 통신에 사용되는 네트워크 프로토콜입니다. 두 가지의 강력한 기능을 결합하면 효율적인 실시간 영상 처리 시스템을 만들 수 있습니다. 이 기사에서는 JavaScript와 WebSocket을 사용하여 이 시스템을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 첫째, 실시간 영상처리 시스템의 요구사항과 목표를 명확히 할 필요가 있다. 실시간 이미지 데이터를 수집할 수 있는 카메라 장치가 있다고 가정해 보겠습니다.
