23 数据类型
23.1 数据类型简介
JavaScript 是一种弱类型或者说动态语言。这意味着不用提前声明变量的类型,在程序运行过程中,类型会被自动确定。
在代码运行时,变量的数据类型是JS引擎根据 = 右边变量值的数据类型来判断的,运行完毕之后, 变量才确定了数据类型。
JavaScript 拥有动态类型,同时也意味着相同的变量可用作不同的类型:
详见:示例
23.3 简单数据类型
JavaScript 中的简单数据类型及其说明如下:
简单数据类型 | 说明 | 默认值 |
---|---|---|
Number | 数字型,包含整型值和浮点型值,如 21、0.21 | 0 |
Boolean | 布尔值类型,如 true 、false,等价于 1和0 | false |
String | 字符串类型,‘张三’ | “” |
Undefined | var a; 声明了变量 a 但是没有给值,此时 a = undefined | undefined |
Null | var a = null; 声明了变量 a 为空值 | null |
23.3.1 数字型 Number
JavaScript 数字类型既可以用来保存整数值,也可以保存小数(浮点数)。
23.3.1.4 判断非数字isNaN()
用来判断一个变量是否为非数字的类型,返回 true 或者 false
var usrAge = 21;
var isOk = isNaN(userAge);
console.log(isNum); // false ,21 不是一个非数字
var usrName = "andy";
console.log(isNaN(userName)); // true ,"andy"是一个非数字
详见:示例
23.3.2 字符串型 String
字符串型可以是引号中的任意文本,其语法为 双引号 ““、单引号’’和反引号``。因为 HTML 标签里面的属性使用的是双引号,JS 这里我们更推荐使用单引号。 反引号可用于模板字符串,参考第 23.3.2.5 节。
var strMsg = "我爱北京天安门~"; // 使用双引号表示字符串
var strMsg2 = '我爱吃猪蹄~'; // 使用单引号表示字符串
// 常见错误
var strMsg3 = 我爱大肘子; // 报错,没使用引号,会被认为是js代码,但js没有这些语法
23.3.2.1 字符串引号嵌套
想在字符串里面显示单引号或者双引号。可以用单引号嵌套双引号 ,或者用双引号嵌套单引号 (外双内单,外单内双)。
var strMsg = '我是"高帅富"程序猿'; // 可以用''包含""
var strMsg2 = "我是'高帅富'程序猿"; // 也可以用"" 包含''
// 常见错误
var badQuotes = 'What on earth?"; // 报错,不能 单双引号搭配
详见:示例
23.3.2.2 字符串转义符
想要对字符串进行换行、缩进和加入特殊字符等。可利用转义符,转义符都是 开头的,常用的转义符及其说明如下
转义符 | 说明 |
---|---|
\n | 换行符,n是newline的意思 |
\ | 斜杠 |
' | 单引号 |
"” | 双引号 |
\t | tab缩进 |
\b | 空格,b代表blank |
详见:示例
案例
实现下图效果:

图23.1: 案例效果
详见:示例
23.3.2.4 字符串拼接
多个字符串之间可以使用 + 进行拼接,其拼接方式为 字符串 + 任何类型 = 拼接之后的新字符串。 拼接前会把与字符串相加的任何类型(包括数字型、NaN和undefined等)转成字符串,再拼接成一个新的字符串
console.log('沙漠' + "骆驼"); //两个字符串的拼接
console.log('pink老师' + 18); //字符串型 拼接 数字型
console.log('12' + 12); //字符串型 拼接 数字型
console.log('pink' + true); //字符串型 拼接 数字型
var age = 18;
console.log('pink老师' + age + '岁'); //字符串拼接数字型变量
详见:示例
案例:显示年龄
弹出一个输入框,需要用户输入年龄,之后弹出一个警示框显示“您今年 xx 岁啦”(xx 表示刚才输入的年龄)
详见:示例
23.3.3 布尔型 Boolean
布尔类型有两个值:true 和 false ,其中 true 表示真(对),而 false 表示假(错)。
布尔型和数字型相加的时候, true 的值为 1 ,false 的值为 0。
详见:示例
23.3.4 Undefined 和 Null
一个声明后没有被赋值的变量会有一个默认值 undefined ( 如果进行相连或者相加时,注意结果)
一个声明变量给 null 值,里面存的值为空(学习对象时,我们继续研究null)
var vari = null;
console.log('你好' + vari); // 你好null
console.log(11 + vari); // 11
console.log(true + vari); // 1
详见:示例
23.4 复杂数据类型
简单类型又叫做基本数据类型或者值类型,复杂类型又叫做引用类型。
- 值类型:简单数据类型/基本数据类型,在存储时变量中存储的是值本身,因此叫做值类型 string ,number,boolean,undefined,null
- 引用类型:复杂数据类型,在存储时变量中存储的仅仅是地址(引用),因此叫做引用数据类型 通过 new 关键字创建的对象(系统对象、自定义对象),如 Object、Array、Date等
简单数据类型存放到栈里面,引用数据类型存放到堆里面。
23.4.1 数组
数组 (Array):一种将一组数据存储在单个变量名下的数据类型。数组可以存储任意类型的数据。
- 元素:数组中保存的每个数据都叫数组元素
- 索引/下标:数组中数据的编号又被称为索引,下标。
- 长度:数组中数据的个数,通过数组的length属性获得
23.4.2 对象
对象详见第 27 章。
23.5 获取变量数据类型
23.5.1 获取检测变量的数据类型
typeof 可用来获取检测变量的数据类型
类型 | 例子 | 结果 |
---|---|---|
String | typeof “小白” | string |
Number | typeof 18 | number |
Boolean | typeof true | boolean |
Undefined | typeof undefined | undefined |
Null | typeof null | object |
详见:示例
23.6 数据类型转换
23.6.1 为什么要进行数据类型转换
例如,使用表单、prompt 获取过来的数据默认是字符串类型的,此时就不能直接简单的进行加法运算,而需要转换变量的数据类型。
我们通常会实现3种方式的转换:
- 转换为字符串类型
- 转换为数字型
- 转换为布尔型
23.6.2 转换为字符串
方式 | 说明 | 案例 |
---|---|---|
加号拼接字符串 | 和字符串拼接的结果都是字符串 | var num=1; alert(num+“我是字符串”); |
toString()函数 | 转成字符串 | var num=1; alert(num.toString()); |
字符串的String()方法 | 转成字符串 | var num=1; alert(String(num)); |
三种转换方式,我们更常用用加号拼接字符串转换方式, 这一种方式也称之为隐式转换。
详见:示例
23.6.3 转换为数字型
方式 | 说明 | 案例 |
---|---|---|
paraseInt(string)函数 | 将string类型转成整数数值型 | paraseInt(’78); |
paraseFloat(string)函数 | 将string类型转成浮点数值型 | paraseFloat(’78.21); |
Number()强制转换函数 | 将string类型转成数字型 | Number(‘12’) |
js隐式转换(- * /运算时) | 利用算数运算转成数字型 | ‘12’-1 |
+号后跟字符型 | 利用+号转换成数字型 | +“123” |
比较运算符 | 利用>,<, ==等比较运算符 | 2==‘2’ |
注意:
- paraseInt输入小数时会向下取整。
- 比较运算符也会将字符型隐式转换为数字型,详见第24.4章。
详见:示例
案例 1:计算年龄
此案例要求在页面中弹出一个输入框,我们输入出生年份后, 能计算出我们的年龄。
详见:示例
案例分析2
计算两个数的值, 用户输入第一个值后,继续弹出第二个输入框并输入第二个值,最后通过弹出窗口显示出两次输入值相加的结
详见:示例
23.6.4 转换为布尔型
- 方式:Boolean()函数
- 案例:
Bollean('true')
- 代表空、否定的值会被转换为 false ,如 ’’、0、NaN、null、undefined,其余值都会被转换为 true。
console.log(Boolean('')); // false
console.log(Boolean(0)); // false
console.log(Boolean(NaN)); // false
console.log(Boolean(null)); // false
console.log(Boolean(undefined)); // false
console.log(Boolean('小白')); // true
console.log(Boolean(12)); // true
详见:示例