关闭
当前位置:首页 - 西甲联赛 - 正文

晚安,必考知识点-JavaScript类型转化(讲原理)-学生时代老师的经典语录

admin 2020-03-28 284°c

一、类型转化先说类型

类型转化指将一种类型转化为另一种类型,那咱们首晚安,必考知识点-JavaScript类型转化(讲原理)-学生时代教师的经典语录先来说说JavaScript中的类型。

我自己是一名从事了多年开发的web前端老程序员,现在辞去职务在做自己的web前端私家定制课程,今年年初我花了一个月收拾了一份最适合2019年学习的web前端学习干货,各种结构都有收拾,送给每一位前端小伙伴,想要获取的能够重视我的头条号并在后台私信我:前端,即可免费获取。

1.1原始(Primitive)数据类型

  • Null
  • Undefined
  • Boolean
  • String
  • Number
  • Symbol
  • BigInt

Big晚安,必考知识点-JavaScript类型转化(讲原理)-学生时代教师的经典语录Int是一种新的数据类型,用于当整数值大于Number数据类型支撑的规模时。这种数据类型答应咱们安全地对大整数履行算术操作,表明高分辨率的时刻戳,运用大整数id,等等,而不需求运用库。重要的是要记住晓松奇谈,不能运用Number和BigInt操作数的混合履行算术运算,需求经过显式转化其间的一种类型。此外,出于兼容性原因,不答应在BigInt上运用一元加号(+)运算符。

1.2引证(Object)数据类型



javaScript中内置了许多目标。

  • Array
  • Array
  • ArrayBuffer
  • AsyncFunction
  • Atomics
  • BigInt
  • BigInt64Array
  • BigUint64Array
  • Boolean
  • DataView
  • Date
  • Error
  • EvalError
  • Float32Array
  • Float64Array
  • Function
  • Generator
  • GeneratorFunction
  • Infinity
  • Int16Array
  • Int32Array
  • Int8Array
  • InternalError
  • Intl
  • Intl.Collator
  • Intl.DateTimeFormat
  • Intl.ListFormat
  • Intl.Locale
  • Intl春意盎然.NumberFormat
  • Intl.Plura桃花扇lRules
  • Intl.RelativeTimeFormat
  • JSON
  • Map
  • Math
  • NaN
  • Number
  • Object
  • Promise
  • Proxy
  • RangeError
  • ReferenceError
  • Reflect
  • RegExp
  • Set
  • SharedArrayBuffer
  • String
  • Symbol
  • SyntaxError
  • TypeError
  • TypedArray
  • URIError
  • Uint16Array
  • Uint32Array
  • Uint8Array
  • Uint8C晚安,必考知识点-JavaScript类型转化(讲原理)-学生时代教师的经典语录lampedArray
  • WeakMap
  • WeakSet
  • WebAssembly
  • decodeURI()省棋王讲棋
  • decodeURIComponent()
  • encodeURI()
  • encodeURIComponent()
  • escape()
  • eval()
  • globalThis
  • isFinite()
  • isNaN()
  • null羊肉不能和什么一同吃
  • parseFloat
  • parseInt
  • undefined
  • unescape()
  • uneval()

详情请参阅MDN,

咱们不要看javaScript的内置目标这么多,转化时只需求把这么通通作为一个类型引证类型进行转化就行,在javaScript内部中转化也不会考虑这么多。

二、主动装箱

为了便利操作根本数据类型, ECMAScript还供给了三个特别的引证类型,根本包装类型小型犬,String、Boolean、Number。有了这三个类型,在需求的时分,原始类型会主动转化成相应的包装目标(这个进程叫主动装箱)。主动装箱便是暂时创立一个包装目标,将原始类型的值封装起来,以便调用包装目标的函数。可是本来那个变量的值不会有任何改变!



字符串是根本数据类型,为撒能调用办法了,这其实在后台进行了一系列的操作

  1. 创立String类型的一个实例
  2. 在实例上调用指定的办法。
  3. 毁掉这个实例。



当然无腿青年感人情诗,你能够将Boolean 、Number 、String 这三个函数当作结构函数来运用,经过手动new包装类来装箱(得到包装目标):






三、类型转经期瘦身换的规矩

四、内部用于完结奥类型冰灯玉露转化的4个函数

4.1 ToPrimitive ( input [ , 晚安,必考知识点-JavaScript类型转化(讲原理)-学生时代教师的经典语录PreferredType ] )














































ToPrimitive将input装换为根本数据类型,PreferredType要么不传,要么是number、string。

4.1.1 PreferredType为numbe晚安,必考知识点-JavaScript类型转化(讲原理)-学生时代教师的经典语录r

  1. 假如inpu晚安,必考知识点-JavaScript类型转化(讲原理)-学生时代教师的经典语录t自身便是原始类型,直接回来input。
  2. 调知豆用input.valueOf(),假如成果是原始类型,则回来卡米洛特金刚鹦鹉这个成果。
  3. 调用input.toString(),假如成果是原始类型,则回来这个成果。
  4. 抛出TypeError反常。

4.1.2 PreferredType为string

  1. 假如input自身便是原始类型,直接回来input。
  2. 调用input.toString(),假如成果是原始类型,则回来这个成果。
  3. 调用input.valueOf(),假如成果是原始类型,则回来这个成果。
  4. 抛出TypeError反常。

4.1.3 PreferredTyp晚安,必考知识点-JavaScript类型转化(讲原理)-学生时代教师的经典语录e不传污克沃斯入

  1. 假如input是内置的Date类型,PreferredType 视为String
  2. 不然PreferredType 视为 Number。

来看看这道网上的面试题


+号操作符,只有当左右两头的类型相同(都为string或许number)是才进行操作。所以会阅历如下过程:

  1. {}和1都会调用ToPrimitive,1原始类型直接回来。
  2. {}内部调用DefaultNumber,运用valueOf办法,回来object。
  3. 在调用toString办法,回来[object, object]。
  4. 所以最终的成果便是[object, object]1。

这一类转化换汤不换药,转化规矩都是这样的。

4.2 ToBoolean ( argument )

4.3 ToNumber( argument 奇瑞a3)

4.4 ToString( argument )

来历:ECMA-262草案/ 2019年11月7日 ECMAScript2020言语标准

五、隐式类型装换

在履行进程中当js内部希望得到某种类型的值,而实践在那里的值是其他的类型,就会发作隐式类型转化。体系内部会主动调用咱们前面说ToBoolean ( argument )、ToNumber ( argument )、ToString ( argument后海 ),测验转化成希望的数据类型。

5.1 希望得到boolean的值




由于在if的括号中,js希望得到boolean的值,所以对括号中每一个值都运用ToBoolean ( argument ),将它们转化成boolean。

5.2 希望得到number的值


由于在乘号的两头,js希望得到number类型的值,所以对右边的那个目标运用ToNumber ( argument ),得到成果5,再与乘号左面的3相老倪除除乐乘。

5.3 加号有别于其他运算符

  • 假如有一边是字符串,就把别的一边也转化为字符串
  • 假如一方不是字符串或许数据,就转化为数据或许字符串

处了加号运算符,其他运算符,只需其间一方数据,那么另一方就被转化为数字

六、显现类型装换

手动调用Boolean(value)、Number(value)、String(value)完结的类型转化。




前面两个类型转化没有什么好解说的,咱们看看最终一个String({a: 1});在内部发作的时分

  1. 履行转化String({a: 1})。
  2. 履行内部的ToString({a: 1})。
  3. {a: 1}不是原始类型,履行ToPrim水星路由器设置itive({a: 1}, hint string)。
  4. 调用toString办法,回来"[object, object]"。
  5. 履行ToString("[object, object]"),返好想你回"[object, object]"。

参阅文章:

  • tc39.es/ecma262/#se…
  • www.cxymsg.com/guide/jsBas

源自:不要啊师傅https://juejin.im/post/5dc431a0e51d4504be09ca8c

声明:文章著作权归作者一切,如有侵权,请联络小编删去。

标签: 未定义标签
admin 14文章 0评论 主页

  用户登录