JavaScript 주제 7: 유형 변환
목차
- 머리말
- 1. 유형 변환이란 무엇인가요?
- 2. 기본 값 변환의 기본 규칙
- 3. 객체를 문자열과 숫자로 변환
- 4. 일반적인 유형 변환 연산자
- 마지막에 작성됨
javascript 비디오 튜토리얼)
머리말유형 변환을 이해하기 전에 Js의 기본 유형에 대해 여전히 의심이 든다면 기본 데이터 유형을 살펴보는 것이 좋습니다. 이것은 기사입니다~
유형 변환은 종종 비판을 받지만 실제로는 많은 경우에 매우 유용합니다. 일부 강제 유형 변환은 유형 변환이 발생한 위치를 명확하게 알려주므로 코드 가독성과 유지 관리성을 향상시키는 데 도움이 됩니다. 하지만 그 중 일부는 우리가 볼 수 없는 곳에서 발생하므로 오늘은 일반적인 유형 변환 연산과 연산에 대해 알아보겠습니다~
1. 유형 변환이란 무엇인가요?우리는 변수의 유형이 저장하는 값의 유형에 따라 결정된다는 것을 모두 알고 있으므로 값을 한 유형에서 다른 유형으로 변환하는 것을 일반적으로 유형 캐스팅이라고 하며 특정 기능을 기반으로 할 수도 있습니다. 두 가지 범주
명시적 유형 변환- 암시적 유형 변환.
명시적 유형 변환은 주로 문자열, 숫자, 부울 및 기타 구성 방법을 통해 해당 문자열, 숫자, 부울 값을 변환하는 것을 말합니다.
const str = String(1);const num = Number("123.3"); //number:123.3
이것은 명시적 사례입니다 - 유형을 변환하는 행위 우리에 의해 시작되었습니다.
1.2 암시적 유형 변환
const newStr1 = 1 + "str"; // '1str'const newStr2 = "hello" + [89, 150.156, "mike"]; // 'hello89,150.156,mike'
C++, Java 및 기타 강력한 유형의 언어로 작업하는 학생들이 유사한 조합을 작성하는 경우 오류를 보고해야 하지만 Js에서는 그렇지 않습니다.
암시적 유형 변환은 항상 존재하므로 이를 받아들이고 장점과 단점을 이해해야 합니다!
일부 데이터 유형 간의 변환은 "다중 프로세스"를 거치게 되며, "프로세스"가 적은 데이터 유형을 먼저 도입하려고 합니다~
2.1 원래 값을 문자열로 변환
String 함수를 사용하여 유형을 문자열 유형으로 변환합니다. String
함수가 매개변수를 전달하지 않으면 빈 문자열을 반환합니다. 매개변수가 있는 경우 ToString(value)을 호출합니다.
및 ToString
도 해당 결과 테이블을 제공합니다. 테이블은 다음과 같습니다.
String
函数不传参数,返回空字符串,如果有参数,调用 ToString(value)
,而 ToString
也给了一个对应的结果表。表如下:
规则:
参数类型 | 返回 |
---|---|
Undefined | “undefined” |
Null | “null” |
Boolean | 如果参数是 true,返回 “true”。参数为 false,返回 “false” |
Number | 结果有很多种,例如 NaN 和 Infinity |
String | 返回与之相等的值 |
举例:
console.log(String()); // 空字符串console.log(String(undefined)); // undefinedconsole.log(String(null)); // nullconsole.log(String(false)); // falseconsole.log(String(true)); // true// Numberconsole.log(String(0)); // 0console.log(String(-0)); // 0console.log(String(NaN)); // NaNconsole.log(String(Infinity)); // Infinityconsole.log(String(-Infinity)); // -Infinityconsole.log(String(1)); // 1
2.2 原始值转数字
有时我们需要将非数字值当作数字来使用,比如数学运算。为此 ES5 规范在 9.3 节定义了抽象操作ToNumber
규칙:
매개변수 유형 | 반환 |
---|---|
Undefine | "undefine" |
Null | "null" |
Boolean | 매개변수가 true이면 "true"를 반환합니다. 매개변수가 false인 경우 "false"를 반환합니다. |
Number | NaN 및 Infinity |
String | 와 같은 값을 반환합니다. |
console.log(Number(true)); // 1console.log(Number(false)); // 0console.log(Number(undefined)); // NaNconsole.log(Number("余光")); // NaNconsole.log(Number("1")); // 1
ToNumber
를 정의합니다. ToString과 마찬가지로 특정 변환 규칙도 있습니다: 🎜🎜🎜🎜🎜parameter type🎜🎜return🎜🎜🎜🎜🎜🎜 true🎜🎜1 🎜🎜🎜🎜false🎜🎜0🎜🎜🎜🎜undefine🎜🎜NaN🎜🎜🎜🎜null🎜🎜0🎜🎜🎜🎜String🎜🎜 반환 하지만 처리가 실패하면 NaN🎜🎜을 반환합니다. 🎜🎜console.log(Number(true)); // 1console.log(Number(false)); // 0console.log(Number(undefined)); // NaNconsole.log(Number("余光")); // NaNconsole.log(Number("1")); // 1
2.3 原始值转布尔
我们使用 Boolean 函数
将类型转换成布尔类型,在 JavaScript 中,只有 6 种 值可以被转换成false
,其他都会被转换成true
。
console.log(Boolean()); // falseconsole.log(Boolean(false)); // falseconsole.log(Boolean(undefined)); // falseconsole.log(Boolean(null)); // falseconsole.log(Boolean(+0)); // falseconsole.log(Boolean(-0)); // falseconsole.log(Boolean(NaN)); // falseconsole.log(Boolean("")); // false
2.4 原始值转对象
原始值到对象的转换非常简单,原始值通过调用 String()、Number() 或者 Boolean() 构造函数,转换为它们各自的包装对象。
null
和 undefined
属于例外,当将它们用在期望是一个对象的地方都会造成一个类型错误 (TypeError) 异常,而不会执行正常的转换。
var a = 1;console.log(typeof a); // numbervar b = new Number(a);console.log(typeof b); // object
三、对象转字符串和数字
3.0 对象转布尔值
3.0 这一小节是我认为值得一提,但篇幅较少的一点:
对象到布尔值的转换非常简单:所有对象(包括数组和函数)都转换为 true
。对于包装对象也是这样,举个例子:
console.log(Boolean(new Boolean(false))); // true
3.1 对象的 toString 和 valueOf
这是一个不太常见的操作,或者说现象,但我们也不能忽略它。
- 对象=>字符串
- 对象=>数字
转换都是通过调用待转换对象的一个方法来完成的,在 Js 中,一般待转换对象拥有两个方法:
- toString
- valueOf
toString
所有的对象除了null
和undefined
之外的任何值都具有toString
方法,通常情况下,它和使用String
方法返回的结果一致。
在JavaSciprt 专题之类型检测中我们提到过Object.prototype.toString
方法会根据这个对象的[[class]]内部属性,返回由 "[object " 和 class 和 “]” 三个部分组成的字符串。举个例子:
const obj = { name: "余光" };obj.toString(); // "[object Object]"obj.toString === Object.prototype.toString; // true
我们已经验证了 => 对象调用 toString 方法是调用其构造函数原型上的方法
其他数据类型的 toString 方法也都有自己的特点:
- 数组:将每个数组元素转换成一个字符串,并在元素之间添加逗号后合并成结果字符串。
- 函数:返回源代码字符串。
[1, 2, 3, 4].toString(); // "1,2,3,4"[].toString(); // ""function func() { console.log();}func.toString(); // "function func () { console.log() }"
valueOf
valueOf 方法返回这个对象本身,数组、函数、正则简单的继承了这个默认方法,也会返回对象本身。日期是一个例外,它会返回它的一个内容表示: 1970 年 1 月 1 日以来的毫秒数。
var date = new Date(2017, 4, 21);console.log(date.valueOf()); // 1495296000000
3.2 对象转字符串和数字的基本规则
在我们知道了 toString()和 valueOf()这两个方法后,来看看转换的规则,即什么时候用:ES5 规范 9.8
参数类型 | 结果 |
---|---|
Object | 1. primValue = ToPrimitive(input, String) 2. 返回 ToString(primValue) |
所谓的 ToPrimitive 方法,其实就是输入一个值,然后返回一个一定是基本类型的值。
我们总结一下,当我们用 String 方法转化一个值的时候:
- 基本类型:参照 “原始值转字符” 的对应表
- 引用类型:调用一个
ToPrimitive
方法,将其转为基本类型,然后再参照 “原始值转字符” 的对应表进行转换。
其实,从对象到数字的转换也是一样:
参数类型 | 结果 |
---|---|
Object | 1. primValue = ToPrimitive(input, Number) 2. 返回 ToNumber(primValue) |
注意:转字符和数字的时候处理略有不同~
3.3 ToPrimitive
那接下来就要看看 ToPrimitive 了,ES5 规范 9.1
这个返回原始值的方法接受一个输入参数 和一个可选的参数来表示转换类型:
- input,表示要处理的输入值
- 如果传入的 input 是 Undefined、Null、Boolean、Number、String 类型,直接返回该值。
- PreferredType,非必填,表示希望转换成的类型,有两个值可以选,Number 或者 String。
- 当不传入 PreferredType 时,如果 input 是日期类型,相当于传入 String,否则,都相当于传入 Number。
如果是 ToPrimitive(obj, Number),处理步骤如下:
- 如果 obj 为 基本类型,直接返回
- 否则,调用 valueOf 方法,如果返回一个原始值,则 JavaScript 将其返回。
- 否则,调用 toString 方法,如果返回一个原始值,则 JavaScript 将其返回。
- 否则,JavaScript 抛出一个类型错误异常。
如果是 ToPrimitive(obj, String),处理步骤如下:
- 如果 obj 为 基本类型,直接返回
- 否则,调用 toString 方法,如果返回一个原始值,则 JavaScript 将其返回。
- 否则,调用 valueOf 方法,如果返回一个原始值,则 JavaScript 将其返回。
- 否则,JavaScript 抛出一个类型错误异常。
所以总结下,对象转字符串(就是 Number() 函数)可以概括为:
举个例子:
console.log(Number({})); // NaNconsole.log(Number({ a: 1 })); // NaNconsole.log(Number([])); // 0console.log(Number([0])); // 0console.log(Number([1, 2, 3])); // NaNconsole.log( Number(function() { var a = 1; })); // NaNconsole.log(Number(/\d+/g)); // NaNconsole.log(Number(new Date(2010, 0, 1))); // 1262275200000console.log(Number(new Error("a"))); // NaN
注意:
转换对象时,你会发现它变成了 NaN,所以
-
在这个例子中,
[]
和[0]
都返回了 0- 当我们
Number([])
的时候,先调用[]
的valueOf
方法,此时返回[]
; - 因为返回了一个对象,所以又调用了
toString
方法; - 此时返回一个空字符串,接下来调用
ToNumber
这个规范上的方法; - 等价于
Number([].valueOf().toString())
,结果为 0;
- 当我们
-
[1, 2, 3]
却返回了一个 NaN:- 当我们
Number([])
的时候,先调用[1,2,3]
的valueOf
方法,此时返回 [1,2,3]; - 因为返回了一个对象,所以又调用了
toString
方法; - 此时为
1,2,3
,接下来调用 ToNumber 这个规范上的方法; - 等价于
Number([1,2,3].valueOf().toString())
,结果为 NaN;
- 当我们
四、涉及到类型转换的运算符
读到这里我们对类型转换有了一定的概念,现在我们再来看看在运算中常见的类型转换问题。
4.1 一元操作符 +
+a
运算符显式地将后面的变量 a 保存的数据转换为数字,不是字符串拼接。
查看 ES5 规范 11.4.6,会调用 ToNumber 处理该值,相当于 Number(‘1’),最终结果返回数字 1。
const a = "1.1";const b = 5 + +a;console.log(b); // 6.6
上面的代码应该是我们经常用到的,当我们知道一个字段是字符串但希望它是数字时,一般会这么做~
我们一起验证下下面这些类型
console.log(+[]); // 0console.log(+["1"]); // 1console.log(+["1", "2", "3"]); // NaNconsole.log(+{}); // NaN
既然是调用 ToNumber 方法我们在之前的小节中提到过
- 如果 obj 为基本类型,直接返回
- 否则,调用
valueOf
方法,如果返回一个原始值,则 JavaScript 将其返回。 - 否则,调用
toString
方法,如果返回一个原始值,则 JavaScript 将其返回。 - 否则,JavaScript 抛出一个类型错误异常。
- 以
+[]
为例,[]
调用valueOf
方法,返回一个空数组,因为不是原始值,调用toString
方法,返回""
。 - 得到返回值后,然后再调用
ToNumber
方法,""
对应的返回值是 0,所以最终返回 0。
4.2 一元操作符 !
一元运算符!
显式地将值强制类型转换为布尔值。但是它同时还将真值反转为假值(或者将假值反转为真值)。
const a = 1;const b = "str";const c = [1, 2, 3];console.log(!a); // falseconsole.log(!b); // falseconsole.log(!c); // falseconsole.log(!0); // trueconsole.log(!""); // trueconsole.log(![]); //falseconsole.log(![]); //falseconsole.log(!undefined); // trueconsole.log(!null); // true
同样的 !!
会讲其他类型转成对应的 bool 值
!和 + 运算符是我们最常用的两种显式类型转换运算符,之后我们再看看那些不经意间就被转换类型的操作~
五、常见的类型转换操作
5.1 字符串和数字之间
const num = 1;const str = "200";console.log(num + str); // '1200'
这段代码大家应该都知道结果,但是其中的原理是否和大家想的一样呢?
const arr1 = [1, 2];const arr2 = [3, 4];console.log(arr1 + arr2); // 1,23,4
两个数组的结果为什么也是个字符串?
原因
ES5 规范 11.6.1 中提到,如果某个操作数是字符串或者能通过以下步骤转换为字符串,+将进行拼接操作
如果其中的一个操作数是引用类型,则首先对其进行ToPrimitive
操作(第三小节有提)
总结
简单来说就是,如果+
的其中一个操作数是字符串(或者通过以上步骤可以得到字符串),则执行字符串拼接;否则执行数字加法。
5.2 被转换成布尔值的操作
现在我们来看看到布尔值的隐式强制类型转换,它最为常见也最容易搞错。相对布尔值,数字和字符串操作中的隐式强制类型转换还算比较明显。
下面的情况会发生布尔值隐式强制类型转换。
- if (…)语句
- 括号内的条件为
true
时执行操作;
- 括号内的条件为
- for ( let i = 0; i
- 语句中的条件判断表达式即 i true
- 循环中的条件判断表达式为
true
;
? :
;5.3 == 和 ===
谈到类型转换,一定绕不开 ==
和 ===
。
==
用于比较两个值是否相等,当要比较的两个值类型不一样的时候,就会发生类型的转换。
在ES5 规范 11.9.5 中简述了它的规则:
当执行 x == y 时:
- 如果 x 与 y 是同一类型:
- x 是 Undefined,返回 true
- x 是 Null,返回 true
- x 是数字:
- x 是 NaN,返回 false
- y 是 NaN,返回 false
- x 与 y 相等,返回 true
- x 是+0,y 是-0,返回 true
- x 是-0,y 是+0,返回 true
- x 是字符串,完全相等返回 true,否则返回 false
- x 是布尔值,x 和 y 都是 true 或者 false,返回 true,否则返回 false
- x 和 y 指向同一个对象,返回 true,否则返回 false
- x 是 null 并且 y 是 undefined,返回 true
- x 是 undefined 并且 y 是 null,返回 true
- x 是数字,y 是字符串,判断 x == ToNumber(y)
- x 是字符串,y 是数字,判断 ToNumber(x) == y
- x 是布尔值,判断 ToNumber(x) == y
- y 是布尔值,判断 x ==ToNumber(y)
- x 不是字符串或者数字,y 是对象,判断 x == ToPrimitive(y)
- x 是对象,y 不是字符串或者数字,判断 ToPrimitive(x) == y
相关免费学习推荐:javascript(视频)
위 내용은 JavaScript 주제 7: 유형 변환의 상세 내용입니다. 자세한 내용은 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 연결의 전이중 방식입니다.

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

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

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

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