四、JavaScript数据类型
基本数据类型
- Boolean(布尔类型):true、false
- Number(数值类型):Number
- String(字符串类型):String
- undefined
- null
复杂数据类型
- Array(数组)
- Object(对象)
- Function(函数)
一、布尔类型
布尔类型只有两个数值 true、false
true:表示真、正确
false:表示假、错误
1 // =等号 是将 右侧的执行结果,赋值给左侧变量存储 2 // 右侧是一个比较表单的表达式 5>4 的结果是 真,正确 3 // 也就是右侧的执行结果是 true 4 var bool1 = 5 > 4;
1 // 将右侧的执行结果,赋值给左侧变量 2 // 5 > 100 执行结果是 假,错误 3 // 也就是右侧的执行结果是 false 4 var bool2 = 5 > 100;
1 // 在JavaScript中允许直接给变量赋值布尔类型数据 2 // JavaScript语法规定,直接定义布尔类型时,字符必须是小写字母 3 var bool3 = true; 4 var bool4 = false;
二、数值类型
数值类型分为整数、浮点数(小数)、NaN
整数
1 在计算机语言中,常用的整数进制 2 二进制 0 1 3 八进制 0 1 2 3 4 5 6 7 4 十进制 0 1 2 3 4 5 6 7 8 9 5 十六进制 0 1 2 3 4 5 6 7 8 9 a b c d e f
1 进制不同,数值的的存储方式也不同 2 二进制 在存储数值前 添加 0b 或者 0B 3 计算机会自动按照二进制数值进行存储 4 5 八进制 在存储数值前 添加 0 6 计算机会自动按照八进制数值进行存储 7 8 十六进制 在存储数值前 添加 0x 或者 0X 9 计算机会自动按照十六进制数值进行存储
1 // 二进制 2 var int1 = 0b100100100; 3 console.log( int1 ); // 默认会按照十进制数值大小输出 4 console.log( int1.toString(2) ); // 强制会按照二进制数值大小输出
1 // 八进制 2 var int2 = 01234567; 3 console.log( int2 ); // 默认会按照十进制数值大小输出 4 console.log( int2.toString(8) ); // 强制会按照八进制数值大小输出
1 // 十六进制 2 var int3 = 0xabcdef; 3 console.log( int3 ); // 默认会按照十进制数值大小输出 4 console.log( int3.toString(16) ); // 强制会按照十六进制数值大小输出
1 // .toString(进制) 2 var int4 = 100; 3 console.log( int4.toString(3) ) // 强制按照其他进制输出 4 console.log( int4.toString(4) ) // 强制按照其他进制输出 5 console.log( int4.toString(36) ) // 强制按照其他进制输出 6 console.log( int4.toString(37) ) // 范围是2-36,多写了会报错
浮点数(小数):float
1 1、有效数值: 2 小数的位数可以是无穷多位,但是在计算机中,规定存储浮点数,是有限制的,不能无限存储小数位数,有效数值计算是从左起的非0数值位数开始 3 在JavaScript语言中,浮点数=整数部分+小数部分,最多一共存储17位,超过17位有效数值的内容,直接舍弃,不会进行四舍五入转化
1 2、科学计数法: 2 语法形式 数值 e + 或者 - 数值,一般如果是 + ,可以省略不写 3 举例 : 2 e +3,2乘以10的3次方 --- 2000 4 2 e -3,2除以10的3次方 --- 0.002 5 比较大的数值,都会使用科学计数法存储 6 数值1,可以是小数,数值2,语法规定,不能是小数 7 JavaScript语法规定,即时是使用科学计数法,存储的整数,数据类型也是浮点数类型 8 2e3 表示的 数值是 2000 看似是一个整数 9 但是 在计算机语法中 这个数值的数据类型 仍然是 浮点数
1 3、浮点数的误差 2 console.log( 0.1 * 0.1 ); 3 console.log( 0.1 * 0.2 ); 4 console.log( 0.1 * 0.3 ); 5 console.log( 0.1 * 0.4 ); 6 console.log( 0.1 * 0.5 ); 7 console.log( 0.1 * 0.6 ); 8 console.log( 0.1 * 0.7 ); 9 console.log( 0.1 * 0.8 ); 10 console.log( 0.1 * 0.9 ); 11 当浮点数直接参与运算或者比较时,计算结果或者比较结果,往往会出现误差,这样的情况,我们称为 浮点数的误差 / 浮点数的精度丢失 12 计算机在存储浮点数时,存储的不是准确数值,存储的是一个近似数值,显示时,显示为一个浮点数值效果 13 实际项目中,一定要杜绝浮点数直接参与运算或者比较判断
NaN数值类型
NaN not a number 不是一个数值
往往是有非数值参与运算的结果,表示结果是数值类型,但是不是某一个具体的数字
1 var int = 100; 2 var str = '北京'; 3 4 var res1 = int - str ; 5 var res2 = int * str ; 6 var res3 = int / str ; 7 // 数值 减去 字符串 8 // 如果是 + 加号,有字符串参与,会执行字符串拼接操作 9 // 当前是 - 减号,有字符串参与,执行结果,仍然是数值类型,但是不是某一个具体的数值,是NaN 10 // 使用 NaN 来表示,虽然是数值类型,但是不是具体的某个数值
1 // 一个 NaN 永远不会等于 另一个 NaN 2 console.log( NaN == NaN ); // 结果永远是 false
三、字符串类型
字符串类型,是一串由字母、数字、符号、汉字等内容组成的数据
字符串类型的数据,必须要定义在引号之中,单引号、双引号没有区别,都可以,只要是被引号包裹的,都是字符串,不管包的是个啥
- 字符串的语法规范:
- 单引号中不能嵌套包裹 单引号
- 双引号中不能嵌套包裹 双引号
转义字符(防止造成冲突)
1 常用的 2 \' 单引号 3 \" 双引号 4 \& 和号 5 \\ 反斜杠 6 \n 换行符 7 8 不常用的 9 \r 回车符 10 \t 制表符 11 \b 退格符 12 \f 换页符
字符串的拼接
1 将两个字符串,通过运算符符号,拼接为一个字符串的语法,称为字符串拼接 2 只要有字符串参与,拼接的结果,一定是字符串
1 字符串拼接的运算原则: 2 如果有字符串参与运算,执行的是 字符串拼接效果 3 如果都是数值参与运算,执行的是 加法运算符效果 4 5 // 使用 + 号 符号,来进行字符串拼接 6 var str1 = '我是str1'; 7 var str2 = '我是str2'; 8 var str3 = str1 + str2; 9 10 // 数值参与运算 11 var money = 100; 12 var str4 = '我有' + money + '块零花钱';
模板字符串
1 模板字符串是一种特殊的字符串,是ES6语法新增的一种字符串形式 2 语法形式是 ` ` 反引号 包裹字符串内容
1 ` ` 模板字符串的优点 2 1、模板字符串支持代码换行,普通字符串不支持在代码中换行 3 2、可以解析变量,将变量使用${}包裹,可以解析${}其中包裹的变量的数据信息 4 3、因为没有外层的单引号,双引号,模板字符串中,单引号,双引号随便写
1 // 可以解析变量 2 var int = 100; 3 var str = `我有${int}元钱`;
四、undefined和null
undefined 是 表示未找到,是变量没有被正确赋值数据时,生成的数据类型
1 // 此时只是定义变量,并没有给变量赋值存储数据 2 var int ; 3 // 此时int中存储的数据类型是 undefined 4 console.log(int);
null表示是空,表示赋值存储的数据,是一个空数据,是一种特殊的数据类型
1 var res = null; 2 console.log(res);
五、数据类型的转换
在JavaScript中,没有定义变量存储数据类型的种类,一个变量中可以存储任意的数据类型
1 var int = 100; 存储整数类型 2 int = '北京'; 存储字符串类型 3 int = true; 存储布尔类型 4 因为JavaScript中不限制变量存储数据的数据类型,因此一个变量可以存储任意的数据类型
但是在JavaScript中,执行程序时,有时需要指定的数据类型参与程序的执行
- 数据类型的转化,分为两种形式
- 自动转换:计算机程序执行时,自动完成的转化
- 强制转化:程序员人为的将数据类型转化为指定的数据类型
if语句转化
1 // 根据不同的判断结果,执行不同的程序代码 2 // 基本语法结构 3 if(条件判断){ 4 执行程序1 5 }else{ 6 执行程序2 7 } 8 9 if( true / false){ 10 // 如果()中是true,执行第一个{}中的语句 11 console.log('小括号里面写的是true'); 12 }else{ 13 // 如果()中是false,执行else后第二个{}中的语句 14 console.log('小括号里面写的是false'); 15 }
自动转化为布尔类型
- 在 if 判断语句执行时,其他数据类型会自动转化为布尔类型
- 因为在 if 语句,( )中理论上只接受布尔类型数值 true 或者 false
- 转化为false的情况 : 数值0 ,空字符串'',undefined,null,NaN
自动转化为字符串类型
- 在执行 字符串拼接时,其他数据类型会自动转化为字符串类型
- 转化原则
- 布尔类型 true ---> 字符串 'true'
- 布尔类型 false ---> 字符串 'false'
- 数值 ---> 转化为纯数字的字符串
- NaN ---> 字符串 NaN
- undefined ---> 字符串 'undefined'
- null ---> 字符串 'null'
- 特殊转化情况
- 数组 ---> 将 [ ] 中的内容,转化为字符串的形式进行拼接,数组本身不受影响,该是什么还是什么
- 对象 ---> 任意的对象,不管是什么内容,都会转化为 [object Object] 字符串,进行拼接
- 函数 ---> 将函数的所有程序内容,转化为字符串,进行拼接
自动转化为数值类型
- 进行非加法算术运算时,其他数据类型类型会自动转化为数值类型
- 加法,如果有字符串参与,会执行字符串拼接
- 如果加法是非字符串的其他数类型,也会自动转化为数值类型
- 任何有NaN参与的运算,结果都是NaN
- 转化原则
- 布尔类型 true ---> 1
-
-
null ---> 0
-
-
-
Number(变量 / 数值) String() Boolean()
-
将其他数据类型强制转化为数值类型,转化原则与自动转化原则相同,不会改变变量中存储的原始数据内容
-
-
parseInt(变量 / 数值)
-
获取变量或者数值的整数部分
-
没有整数部分,执行结果是NaN
-
整数字符串,没有任何影响,就是获取整数部分
-
浮点数字符串,就是单纯的获取整数部分,直接获取,不是四舍五入
-
科学计数法,只会获取e之前的整数部分,不会获取其他内容
-
如果是不符合数字规范的字符串,从左起获取整数部分(‘123abc’ ---> 123)
-
数组 获取 [ ] 内的数据内容,从左侧起获取整数部分,如果不符合整数规范,结果就是NaN
-
-
parseFloat()
-
获取浮点数部分,如果是整数,就获取整数部分
-
从左侧起,获取符合浮点数语法规范内容部分,如果左侧第一个内容,就不符合浮点数规范,结果就是NaN
-
-
-
-
-
布尔值类型都是 boolean
-
数值类型都是 number
-
字符串类型都是 string
-
undefined 是 undefined
-
函数的结果是 function
-
-