(Day6) 强制转型&显性转型

动态型别

前面有介绍 JavaScript 资料分成七种原始型别以及物件型别,关於型别 JavaScript 有一种广为人知的特性:动态型别。

JavaScript 之所以会是动态行别,就要提到到实做中 JavaScript 最容易碰上的底层问题之一 『强制转型』,而 强制转型 又分成两种

  • 显性转型(Explicit Conversion ) ,故名思义就是我们实际在程序码中,会看有明确对变数执行转型动作。
  • 隐含转型 ( Implicit Conversion ),和上显性转型与之相反概念,就是看不到单从程序码,在程序码上没看到转型动作,但 JavaScript 中偷偷帮你转型的方法。

今天就会介绍大致上有哪些语法是显性转型,下篇则会再介绍隐含转型。

而这两种术语并没有特别明确的规范,他只是相对上的术语,因此有些状况看起来是 :似隐似显的 但其实不用太纠结是分类在哪种,知道如何使用就没有问题了,两种转型范例:

var test1 = '123'
test1 = Number(test1 )//显性转型

var test2 = 456
test2 = test2 + '1' //隐性转型

显性转型

在 『你不懂JS』一书中是将显性转型分成以下三种:

  • 显性转型 : Strings <--> Numbers
  • 显性转型 :数字字符串
  • 显性转型 :Boolean

『你不懂JS』一书这种分法确实比较全面,但对我们这些脑袋比较简单的人来说,反而不好理解,这边试者改成比较容易理解三种:

  • 显性转型 :转成 String
  • 显性转型 :转成 Number
  • 显性转型 :转成 Boolean

这边也在根据上面三种分类,稍微说明有哪些语法。

转成 String

  • 使用 String() 方法
var test3 = 123
test = String(test3)
typeof(test3 ) // '123'
  • 阵列原型的 toString()
var array = ["R","y","d","e","r"]
var test4 = array.toString() //'R,y,d,e,r'

转成 Number

  • 使用 Number()parseInt() 方法
var string = '123'
var test5 = Number(string) //123
var test6 = parseInt(string) // 123
  • 使用 使用一元正/负运算子 +-
var string = '123'
var test7 = + string //123

不过这种方法确实容易跟 二元运 算术运算子的 - 写法搞混,也因此实做确实比较少看到这种写法。

转成 Boolean

  • 使用 Boolean() 方法
var string = 'test'
var array =[]
var number = 0
var not = null
var boolean1 = Boolean(string) // true
var boolean2 = Boolean(array) // true
var boolean3 = Boolean(number) // false
var boolean4 = Boolean(not)//false

以上大概就是常见的显性转型,值得一提的是使用 new String()new Number() 等等的 new 建构式方法他们并不算在强制转型的范畴中,因为这些建构式制作出来的都会物件型别的资料。

当然还有一种状况是,将变数的值调整成另一种型别的值,这种作法,也是属於显性转换的一种,不过这部分一看就知道,因此上述都没有特别提出来,例如:

var test8 = 123
test8 = 'test'

参考资料


<<:  【Day 3】BERT的输出与它们的意义

>>:  关於研发这件事

[Day 29] 使用 Python Flask 架设 API 吧!

使用 Python Flask 架设 API 吧! 今日学习目标 API 观念讲解 什麽是 API?...

Day26 Redis架构实战-Redis丛集架构/Gossip协议

Redis丛集架构目标情境 高效能与可依照效能需求线性扩增节点达到1000个 最少3个Master,...

RxJS Multicast 类 Operator (1) - multicast / publish / refCount / share / shareReplay

还记得之前我们介绍过 Cold Observable v.s. Hot Observable 吗? ...

Day34 参加职训(机器学习与资料分析工程师培训班),网站设计与网页工程技术

目标: 爬取股价,使用线性回归预测股价 from datetime import time from...

[DAY-11] 诚实敢言最大化 建立回馈循环

只说你敢当面对那个人说的话 越少在背後议论别人 会妨碍效率且引起负面感受的八卦就会减少 诚实就像看...