如何在JavaScript中对类型进行强制转换

  介绍

这篇文章给大家介绍如何在JavaScript中对类型进行强制转换,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

<强> avaScript原语

JavaScript建立在一系列基本单元之上。你应该对其中的一些已经很熟悉了,比如字符串和数字:

var  greet =,“Hello";   var  year =, 89,

字符串和数字是该语言所谓“原语”的一部分。完整清单是:

<李>

字符串数量<李>

<李>

布尔

<李>

<李>

定义

<李>

对象<李>

符号(ES6中添加,此处不予介绍)

布尔值用来表示可能是真或假的值。空是故意不去赋值,它通常被分配给一个变量,用于表示绑定完毕,稍后将填充有意义的内容。

var 或者=,零;

然后才是未定义的,这意味着变量仍然没有被附加上:

var 名称;   console.log(名字)   未定义的

零和未定义的看起来非常相似,但它们是两个截然不同的实体,很多开发人员仍然不确定应该使用哪个。

如果要判断JavaScript实例的类型,可以用typeof运算符。让我们用字符串尝试一下:

typeof “alex"   祝辞,“string"

还有数字:

typeof  9   祝辞,“number"

用于布尔值:

typeof 错误的   祝辞,“boolean"

定义:

typeof 定义   祝辞,“undefined"

还有空:

typeof  null   祝辞,“object"

结果令人惊讶!空看起来像一个对象,但实际上它是JavaScript中的一个历史性错误,自语言诞生就躺在那里了。由于这些问题,JavaScript一直声名狼借。但这仅仅是个开始。

<强>陌生的事情

在JavaScript中,在两种类型之间进行转换时有一些奇怪的规则。让我给你一些背景信息。先用Python举一个例子。在Python中执行以下指令:

& # 39;你好# 39;,+,89

会给你一个明确的错误:

TypeError:可以> & # 39;你好# 39;,+,89

事实上给出:

“hello89"

,如果我们尝试向字符串添加数组,看起来会更加奇怪:

& # 39;你好# 39;,+,[]

将会得到

, & # 39;你好# 39;

,还有

& # 39;你好# 39;+ [89]

,会给你一个惊喜:

,“hello89"

,看起来这种转换背后存在某种逻辑。它甚至适用于存在更多元素的数组:

& # 39;你好# 39;,+,[150.156 89年,,,,& # 39;迈克# 39;]

得到:

“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 =,字符串(年)

然后我可以连接两个变量:

问候+ yearString;

,但是在JavaScript中有一种被称为隐式转换的微妙机制,由JavaScript引擎提供。该语言不会阻止我们对数字和字符串进行加法操作:

& # 39;你好# 39;,+,89

会得到:

“hello89"

,但是这种转换背后的逻辑是什么?你可能会惊讶地发现JavaScript中的加法运算符+会自动将两个操作数中的任何一个都转换为字符串,如果其中至少有一个是字符串的话!

你会发现更令人惊讶的是,这条规则在ECMAScript规范中一脉相承。第11.6.1节定义了加法运算符的行为,我在这里为你做了总结:

如果x是y是字符串或字符串,则返回ToString (x),然后返回ToString (y)

如何在JavaScript中对类型进行强制转换