购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.2 数据类型

在计算机中,不同的数据占用的存储空间是不同的。变量的数据类型决定了如何将变量的值存储到计算机的内存中,所有变量都具有数据类型。JavaScript是一种弱类型语言,声明变量时不需要指明数据类型,变量的数据类型由所赋的值的类型决定。

2.2.1 数据类型分类

JavaScript把数据类型分为基本数据类型和复杂数据类型(复杂数据类型也称为引用数据类型)两类。基本数据类型包含了number(数字)类型、string(字符串)类型、boolean(布尔)类型、undefined(未定义)类型、null(空)类型;复杂数据类型就是对象类型,包含了对象、数组、函数。数据类型划分示意图,如图2-2所示。

图2-2 数据类型分类

本小节介绍基本数据类型,后续章节将分别介绍复杂数据类型。

1. number(数字)类型

数字类型用于存储数字。数字可分为整型和浮点型,整型用于表示整数,浮点型用于表示小数。示例如下:

var age = 21; // 整数
var salary = 2000.3; // 小数

数字类型有Infinity、-Infinity和NaN(Not a Number)三个特殊值,分别代表正无穷大、负无穷大和非数字。JavaScript提供了isFinite()和isNaN()函数,用于判断当前变量是否为有限数值和非数字(这些函数介绍详见函数章节)。示例如下:

var age = 21; // 整数
var salary = 2000.3; // 小数
console.log(3/0);// 输出:Infinity
console.log(-3/0); // 输出:-Infinity
var age; // 声明变量age,没有初始化默认值是undefined
console.log(age+3); // 输出:NaN

2. string(字符串)类型

字符串类型是一个连续的字符序列,可以是计算机能够表示的任何字符序列。JavaScript通过使用单引号或者双引号表示字符串。由于HTML标签里面的属性使用的是双引号,本书推荐使用单引号表示字符串。示例如下:

var strMsg = "爱我中华"; // 使用双引号表示字符串
var strMsg2 = '爱我中华'; // 使用单引号表示字符串
var strMsg3 = 爱我中华; // 错误,缺少引号

需要注意的是,JavaScript可以用单引号嵌套双引号,或者用双引号嵌套单引号。示例如下:

// 用单引号嵌套双引号
var strMsg4 = '从政府工作报告看稳就业的"组合拳" ';
// 用双引号嵌套单引号
var strMsg5 = " '祝融'探火,'羲和'逐日,'天和'遨游星辰";
// 错误。单双引号需搭配
var strMsg6 = '对高校毕业生'要加强就业创业政策支持和不断线服务'';

JavaScript的反斜杠(\)有着特殊的用途,通过它和一些字符的组合使用,可以在字符串中包括一些无法直接键入的字符,或改变某个字符的原义。反斜杠(\)称为转义字符,例如\n表示的是换行符,可实现换行功能。JavaScript常用的转义字符如表2-3所示。

表2-3 常用的转义字符

转义字符的应用,示例如下:

var strMsg = " 把\"国之大者\"作为\"责之重者\",把\"民之关切\"作为\"行之所向\" ";
alert(strMsg);

上述代码在Chrome浏览器中的运行结果,如图2-3所示。

图2-3 转义字符的使用

从图2-3可知,输出字符串中的双引号,除了可以使用单引号嵌套双引号方法外,还可以在双引号里面使用转义字符。

3. boolean(布尔)类型

布尔类型表示真或假、是或否,只有true和false两个值,true表示“真”,false表示“假”,区分大小写。示例如下:

var foo = true;// 正确
var bar = false; // 正确
var foo = TRUE; // 错误。TRUE没有定义
var bar = FALSE; // 错误。FALSE 没有定义

提示: 布尔类型在程序中通常用于流程控制语句中判断条件是否成立,例如if-else语句。

4. undefined(未定义)类型

如果var关键字声明一个变量,但没有对其赋值,此变量的数据类型是undefined 示例如下:

var age; // 声明变量 age ,没有初始化,默认值是 undefined

5. null(空)类型

空类型用于定义空的或不存在的引用。示例如下:

var obj = null; // 声明变量obj,初始值是null

2.2.2 数据类型检测

JavaScript使用运算符typeof来检测变量或值的数据类型,返回值是代表数据类型的字符串。typeof返回值如表2-4所示。

表2-4 typeof返回值

(续表)

typeof检测null时,结果是object对象类型,这是JavaScript留下的历史遗留问题。JavaScript进行数据底层存储的时候用二进制存储,它的前三位代表存储的数据类型,而000是代表object类型,也就是引用类型的数据。由于null全是0,所以它符合object类型的存储格式,因此typeof检测的时候输出object。

2.2.3 数据类型转换

不同类型的数据在一起参与运算时,有时需要进行数据类型转换。JavaScript数据类型转换可以分为自动类型转换和强制类型转换两种。

1. 自动类型转换

自动类型转换并不会改变操作数本身的类型,改变的仅仅是这些操作数如何被求值以及表达式本身的类型。

(1)其他类型转布尔型

其他类型转换为布尔型时,会被看作false的数据,如表2-5所示。其他数据会被视为true。

表2-5 其他类型转布尔型

其中,浮点型0.0后面无论添加多少个0,值均为false;空字符串的值为false,但包含一个空格的非空字符串的值为true。

(2)其他类型转数字型

布尔型和数字型进行算术运算时,true会自动转换为1参与运算,false会自动转换为0参与运算。示例如下:

var foo = true;
console.log(foo+3); // 输出:4
console.log(true*3); // 输出:3

undefined参与算术运算时结果为NaN。示例如下:

var age; // 声明变量age,没有初始化,默认值是undefined
console.log(age+3); // 输出:NaN

null参与算术运算时转换为0。示例如下:

var obj = null; // 声明变量obj,初始值是null
console.log(obj+3); // 输出:3

如果运算符为-、*、/、%中的任意一个,JavaScript会自动将字符串转换为数字,对无法转换的则转换为NaN。示例如下:

console.log("15"-5); // 输出:10
console.log("2"*5); // 输出:10
console.log("15"-"a"); // 输出:NaN

(3)其他类型转字符串型

如果表达式中存在字符串类型和其他类型数据,而运算符使用加号“+”,JavaScript会自动将其他类型转换为字符串,并将两个字符串拼接在一起。示例如下:

console.log("20"+2); // 输出:202
var age = 100;
// 输出:2021年是中国共产党成立100周年
console.log('2021年是中国共产党成立'+age+'周年');
var variable = undefined;
console.log(variable + '你好'); // 输出:undefined你好

2. 强制类型转换

强制类型转换可以把一种数据类型强制转为另一种数据类型,JavaScript中强制类型转换主要通过调用Number()、parseFloat()和parseInt()等函数来实现,具体内容详见函数章节。 XCFtNis/4XcEtH89dTL2m0IXF8Ir1ZY8BahFXytqfHoo9S9te/yrddKKU1ZXrfrN

点击中间区域
呼出菜单
上一章
目录
下一章
×