数据类型

本文基于ECMAScript5规范,对JavaScript中的数据类型进行说明。

 

概述

JavaScript语言提供了以下6种数据类型。

序号类型含义说明
1undefined未定义未声明的变量或者声明过但没有赋值的变量的值,会是undefined,也可以是显示的将一个变量的值设为undefined
2number数值数值字面量以及数值与数值的运算结果是数值,一些函数/方法的返回结果是数值
3string字符串字符串字面量
4boolean布尔值两个字面量:true/false
5function函数JavaScript中的函数具有多种含义,可以是一般的函数,也可以作为对象的构造器。Object,Array,Function等所有类型,作为对象的构造器,其本身的数据类型都属于function
6object对象基于原型继承的面向对象。Array,Number,String等类型的实例的数据类型都属于object。

使用typeof操作符可以获取对象的数据类型。

console.log(typeof Object); // function
console.log(typeof Array); // function
console.log(typeof 3); //number
var n = new Number(3);
console.log(typeof n); // object
console.log(typeof "345"); // string
var s = new String("345");
console.log(typeof s); // object
console.log(typeof true); // boolean
console.log(typeof undeclaredvar); // undefined

console.log(typeof null); // object

ECMAScript规范本身并没有对以上的类型进行归类,但从JavaScript技术实现上我们可以作如下的归类。

  • 原始类型
    • string 字符串
    • number 数値
    • boolean 布尔值
  • 引用类型
    • object 对象
    • function 函数
  • 特殊类型
    • Null类型
      只有一个唯一值:null
    • Undefined类型
      只有一个唯一值:undefined

原始类型

原始类型是按值进行访问的,将一个原始类型变量的值赋值给另一个变量时,将导致值的复制。 为了便于操作原始类型值,JavaScript还为每个原始类型分别提供了一个包装用的引用类型:

  • 布尔类型:Boolean
  • 数值类型:Number
  • 字符串类型:String

这些类型与其他引用类型相似,每当读取一个原始类型值得时候,JavaScript引擎就会创建一个对应的包装类型的对象,从而让我们能够调用该对象的方法来操作这些数据。例如:

var len = "abce".length;

注意:很多文章将原始类型称作基本类型,在本文中,基本类型包含上述ECMAScript定义的所有6种类型,基本类型=原始类型+引用类型+特殊类型

布尔类型

布尔类型有两个值:true 和 false,都属于JavaScript的字面量。

数值类型

数值类型(number)的数字既可以表示32位的整数,也可以表示64位的浮点数。直接输入的任何数字都被看作数值类型(number)的字面量。

var i1 = 123;
var f1 = 23.56;

整数可以被表示为八进制,十六进制或二进制的字面量。

字符串类型

字符串类型与其他原始类型不同,它没有固定大小。可以用字符串存储0或更多的Unicode字符,由16位整数表示。 字符串中的每个字符都有特定的位置,首字符从位置0开始,第二个字符在位置1,依次类推。

引用数据类型

(本节处于编辑中)

特殊数据类型

Undefined类型和Null类型在语言中具有特别的作用,因此我们把它们放在特殊数据类型里。

Undefined类型

如前所述,Undefined类型只有一个值,即undefined。当声明的变量未初始化时,该变量的默认值是undefined。 请注意:Undefined是类型,undefined是其唯一实例。与null不同,undefined并不是JavaScript的字面量,而是作为一个全局变量存在的。

Null类型

Null类型也只有一个值: null,null属于JavaScript的字面量。 null表示一个空值对象(对象本身已定义,只是其值为空),typeof运算返回的数据对象是引用类型的object。