你不知道的JavaScript之类型

JavaScript是一门简单易用的语言,应用广泛,同时它的语言机制又十分复杂和微妙,即使经验丰富的开发人员也需要用心学习才能真正掌握。

《你不知道的JavaScript》中是这样定义类型的:

类型是值的内部特征,它定义了值的行为,以使其区别于其他值。

这样的定义可能略简单了一些,不够已经足够让我们去理解类型的含义。

不得不提的强制类型转换

在JavaScript中,强制类型转换无处不在,在我们的程序中,有意无意地,都经常地利用到强制类型转换。它给我们带来了许多便利,同时也容易造成某一些坑。当然了,之所以造成坑,也主要就是因为对类型的了解不够。所以,我们十分有必要学习一些关于类型的细节。

内置类型

JavaScript有7种内置类型,分别是:

  1. 空值,null
  2. 未定义,undefined
  3. 布尔值,boolean
  4. 数字,number
  5. 字符串,string
  6. 对象,object
  7. 符号,symbol(ES6中新增的)

这其中,除了对象以外的统称为基本类型。

typeof null === "object"

出乎意料的,这条语句是true,即用typeof去判断null的类型,得到的是object,这是一个由来已久的bug。修复它可能会导致许多现存系统的崩溃,所以这个bug也许会一直存在。

值和类型

首先JavaScript不同于C++等的编程语言,JavaScript中的变量是无类型的,一个变量可以持有任何类型的值。对一个变量使用typeof操作,返回的也是变量持有的值的类型。

undefined

关于undefined,是挺纠结的...
考虑以下三种情况:

  1. 声明一个变量却不赋值的话,typeof操作返回的值是undefined。
  2. 如果去typeof一个未声明的变量,不会报错,返回的同样是undefined。
  3. 使用一个未声明的变量a,会报错a is not defined.

值得注意的是,undefined和not defined看上去很相似,其实是不同的,其实not defined用undeclared来表示会减少许多误解。

不过,上述情况中的第二条的原理,也被称作typeof的安全防范机制,有时候也被用来检查未声明的变量。因为这样不会报错,某些情况下很有用。

posted @ 2018-03-01 21:53  xzhx  阅读(201)  评论(0编辑  收藏  举报