02-JS基本数据类型
# 数据类型简介和检测
JS 中数据类型分为两大类:基本数据类型和复杂数据类型。

typeof 运算符:使用 typeof 运算符可以检测值或者变量的类型
typeof 5; // number
typeof 'hello'; // string
2
5 种基本数据类型的 typeof 检测结果

# 基本数据类型
# Number(数字)类型
# 数字的表现形式
所有数字不分大小、不分整浮、不分正负,都是数字类型
小数中 0 可以省略
0.5 可以写成
.5科学计数法
3e8表示3*10^8,3e-4表示3*10^-4不同进制的数字
/* 二进制以 0b 开头 */ 0b1111 // 2 /* 八进制以 0 开头 */ 017 // 15 /* 十六进制以 0x 开头 */ 0xf // 151
2
3
4
5
6
7
8
# 特殊数字类型值 NaN
NaN是英语 "not a number" 的意思,即“不是一个数”,但它是一个数字类型的值typeof NaN; //number10 除以 0 的结果是
NaN,事实上,在数学运算中,若结果不能得到数字,其结果往往都是NaN// 下面运算结果都是 NaN 0 / 0 '我' + '你'1
2
3NaN有一个“奇怪”的性质:不自等。这个知识点将在后续课程中讲解。NaN == NaN // false1
# String(字符串)类型
# 字符串性质
- 字符串就是“人类的自然语言”
- 字符串要用引号包裹,双引号或者单引号均可
- 字符串的
length属性表示字符串的长度
# 字符串的常用方法

以如下字符串为例,介绍这些方法

charAt
charAt() 获取指定位置的字符
'我喜欢JS,我也喜欢HTML'.charAt(0) // '我' '我喜欢JS,我也喜欢HTML'.charAt(100) // ''1
2可以直接使用角标获取字符
'我喜欢JS,我也喜欢HTML'[0] // '我'1
substring
substring(a, b) 得到从 a 开始到 b 结束(不包括 b)的子串
'我喜欢JS,我也喜欢HTML'.substring(3, 5) // 'JS'1substring(a, b) 省略第二个参数,返回字串一直到结尾
'我喜欢JS,我也喜欢HTML'.substring(6) // '我也喜欢HTML'1substring(a, b) 中,a 可以大于 b,数字顺序将自动调整为小数在前
'我喜欢JS,我也喜欢HTML'.substring(3, 5) // 'JS'1
substr
substr(a, b) 得到从 a 位置开始长度为 b 的字串
'我喜欢JS,我也喜欢HTML'.substr(3, 2) // 'JS'1substr(a, b) 中 b 可以省略,表示到字符串结尾
'我喜欢JS,我也喜欢HTML'.substr(3) // 'JS,我也喜欢HTML'1substr(a, b) 中 a 可以是负数,表示倒数位置
'我喜欢JS,我也喜欢HTML'.substr(-4, 2) // 'HT'1
slice
slice(a, b) 得到从 a 开始到 b 结束(不包括 b)的子串
'我喜欢JS,我也喜欢HTML'.slice(3, 5) // 'JS'1slice(a, b) 参数 a 可以是负数
'我喜欢JS,我也喜欢HTML'.slice(-4, -1) // 'HTM'1slice(a, b) 参数 a 必须小于参数 b
'我喜欢JS,我也喜欢HTML'.slice(5, 2) // '' (得到空串)1
substring、substr 和slice 对比总结
substring(a,b) 和 slice(a,b) 功能基本一致,都是得到从 a 开始到 b 结束(不包括b)的子串,区别:
① substring0可以自动交换两个参数位置,而slice0不行;
② slice0的参数a可以是负数,而substring0不行。
substr(a,b) 中参数b是子串长度,而不是位置编号
toUpperCase 和 toLowerCase
- toUpperCase() 转为大写
- toLowerCase() 转为大写
indexOf
indexOf()方法返回某个指定的字符串值在字符串中首次出现的位置如果要检索的字符串值没有出现,则该返回 -1
'abc'.indexOf('b') // 1 'abc'.indexOf('m') // -11
2
# Boolean(布尔)类型
布尔型值只有两个:true 和 false,分别表示真和假
# undefined类型
一个没有被赋值的变量的默认值是undefined,而undefined 的类型也是 undefined。即:undefined 又是值,又是一种类型,这种类型只有它自己一个值。
typeof undefined; // undefined
在变量声明提升时,变量的值也是undefined。
console.log(a); // undefined
console.log(typeof a); // undefined
var a = 10;
2
3
# null类型
null 表示“空”,它是“空对象”
当我们需要将对象销毁、数组销毁或者删除事件监听时,通常将它们设置为 null
用 typeof 检测 null 结果是 object
typeof null; // "object"1类型和 typeof 检测结果并不总是一一对应,比如数组用 typeof 检测结果也是 object
# 数据类型转换
# 数据类型转换
# 其他值->数字
Number() 函数将其他类型转为数字

Number() 函数首字母大写,因为它是一个内置的构造函数。
parseInt() 函数将字符串转为整数

parseFloat() 函数将字符串转为浮点数

# 其他值->字符串
使用 String() 函数

使用 toString() 方法
注意这里 toString() 的 方法,几乎所有的值都有 toString() 方法。
# 其他值->布尔值
使用 Boolean() 函数

# (案例)小小加法计算器
这里需要注意的是用户输入的是字符串
// 让用户输入两个数字
var a = Number(prompt('请输入第一个数字'));
var b = Number(prompt('请输入第二个数字'));
// 计算两个数字的和
var sum = a + b;
// 弹出结果
alert('数字' + a + '加上数字' + b + '的结果是' + sum);
2
3
4
5
6
7
# 复杂数据类型简介
- 除基本类型值外,S的世界中还有复杂数据类型。
- 复杂数据类型都是“引用类型”,引用类型的特性将在数组章节介绍