JavaScript变量松散类型
的本质,决定了它只是在特定时间用于保存特定值的一个名字而已,可以理解为变量占了一个坑,具体填的是黄金还是泥土就要看自身造化了……
ECMAScript变量可能包含两种不同数据类型的值:基本类型值
和引用类型值
。基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象。
基本数据类型
基本数据类型有六种:Undefined、Null、Boolean、Number、String和Symbol。
这五种基本数据类型是按值访问的,因为可以操作保存在变量中的实际的值。
基本数据类型比较简单,这里提供一些注意点:
- Undefined类型:只有一个值(即undefined),变量声明但未对其初始化,该变量的值就是undefined。
- Null类型:只有一个值(即null),null值表示一个空对象指针。
null == undefined // true
-
Boolean类型:只有两个字面值(即true和false)。
转型函数Boolean()
-
Number类型:使用IEEE754格式来表示整数和浮点数值,其中有一个特殊数值NaN,用于表示一个本来要返回数值的操作数但未返回数值的情况。
NaN == NaN // false
转型函数Number()、parseInt()、parseFloat()
- String类型:转型函数toString()、String()
null和undefined没有toString()方法,所以用String()函数可以返回这两个值的字面量。
typeof操作符
检测给定变量的数据类型,对一个值使用typeof操作符可能返回下列某个字符串
:
- “undefined”——如果这个值未定义
- “boolean”——如果这个值是布尔值
- “string”——如果这个值是字符串
- “number”——如果这个值是数值
- “object”——如果这个值是
对象或null
- “function”——如果这个值是函数
引用类型
引用类型的值是保存在内存中的对象,JavaScript不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间。在操作对象时,实际上是在操作对象的引用而不是实际的对象。为此,引用类型的值是按引用访问的。
ECMAScript提供了很多原生引用类型:
- Object类型
- Array类型
- Date类型
- RegExp类型
- Function类型
- 基本包装类型:3个特殊的引用类型(Boolean、Number和String)
每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象,从而让我们能够调用一些方法来操作这些数据。自动创建的基本包装类型的对象只存在于一行代码的执行瞬间
,然后立即被销毁,所以我们不能在运行时为基本类型值添加属性和方法。 - 单体内置对象:Global对象和Math对象。
instanceof操作符
在检测引用类型的值时,typeof操作符的用处就不大了。通常,我们并不是想知道某个值是对象,而是想知道它是什么类型的对象。为此,ECMAScript提供了instanceof操作符。语法如下:
result = variable instanceof constructor
所有引用类型的值都是Object的实例,因此,在检测一个引用类型值和Object构造函数时,instanceof操作符始终会返回true。