数据类型介绍
Undefined
只有一个值,undefined; undefined值由null值派生而来; 变量声明时未初始化,它的值就是undefined; 是一个假值。
Null
只有一个值,null; 表示一个空的对象指针; 也是一个假值;
注意:
- null == undefined // true ==操作符会隐式转换它的操作数
- {} != null // true 另,开发中用 {}定义初始化对象变量--这是一个没有内容的对象,有原型链;null啥也没有
Boolean
只有两个值, true 和 false; Boolean() 可以显示的将任意值转为布尔值 隐式转换:在if等流控语句中会自动执行其他类型值到布尔值的转换
转换为false的值(6个值,其余全为true)
- false
- ""(空字符串)
- 0,NaN
- null
- undefined
Number
使用八进制(前缀0o),十六进制(前缀0x)创建的数值在任何数学运算中都被视为十进制整数,返回的结果都是十进制的 永远不要用浮点数进行运算,存在精度问题 科学计数法:3.14e7 或 3.14E7
值的范围
- NUMBER_MIN_VALUE(最小值) NUMBER_MAX_VALUE(最大值) Infinity(无穷大) -Infinity(无穷小)
- 可以用 isFinnite()判断一个值是否有限大,返回false则超出超出范围
- 安全整数:
NaN
- (Not a Number):用于表示本来要返回数值的操作失败了(而不是返回错误)
- 任何涉及NaN的操作始终返回NaN
- NaN不等于包括NaN在内的任意值
- isNaN() 函数判断是否为NaN,注意isNaN()函数接收到一个值后,会尝试将它转换为数值,任何不能转换为数值的值都会导致这个函数返回 true
例子:
console.log(isNaN(NaN)); // true
console.log(isNaN('10')); // false
console.log(isNaN('10')); // false
console.log(isNaN('blue')); // true
console.log(isNaN(true)); // false
数值转换
转换方法: Number() 、parseInt() 、parseFloat()、 +(一元加操作符) Number():转型函数,可用于任何数据类型; parseInt() 、parseFloat() :将字符串转换为数值
- Number()的转换规则(+号规则相同)
- 布尔值,true转为1,false转为0;
- 数值,直接返回;
- null,返回0;
- undefined,返回0;
- 字符串:
- 如果字符串仅包含数字(或八进制,十六进制)和加减号,则返回对应的十进制的数值,浮点数则返回浮点数;
- 空字符串,则返回0;
- 其他情况,则返回NaN;
- 对象:调用valueOf()方法,并按照上述规则转换返回的值,如果结果为NaN;则调用toString()方法,再按照上述规则转换
- parseInt()的转换规则
只要首个字符(忽略前面的空格)是数字和加减号,就可以转换 空字符串,返回NaN 有第二个参数,用于指定 进制数,默认10
- parseFloat()的转换规则
和parseInt大致相同。 不过会识别第一个“.” ;且只解析十进制值
// Number()
console.log(Number('12.9a')); // NaN
// 字符串中仅能包含数字,无论非数值字符是在前还是在后,都返回NaN
console.log(Number('12.9')); // 12.9
console.log(Number('-12.9')); // -12.9
console.log(Number('*12.9')); // NaN 仅能解析加减号
console.log(Number('012.9')); // 12.9
console.log(Number('0xa')); // 10
console.log(Number('0o17')); // 15
console.log(Number(' ')); // 0
// parseInt()
console.log(parseInt('12.9a')); // 12
console.log(parseInt(' ')); // NaN
console.log(parseInt('0xa')); // 10
// 第二个参数指定后,第一个参数只能作为对应进制数来解析
console.log(parseInt('0xa', 10)); // 0
// parseFloat()
console.log(parseFloat('12.9a')); // 12.9
console.log(parseFloat('0xa')); // 0
String
表示零或多个Unicode字符序列 length属性:返回16位字符的个数(所以会包含空格和换行!!)
- 字符串的特点:是不可变的。即要修改某个变量的字符串值,必须先销毁原始的字符串,然后将包含新增的另一个字符串保存到该变量。
- 转换为字符串:
- toString()方法:可用于 数值、布尔值、对象、字符串值。null和undefined没有该方法; 另外,在对数值调用toString()方法时,可传入参数指定进制数
- Sting()方法:可对null和undefined使用,其他的调用toString()方法。
- 拼接字符串:用+号和字符串拼接,也可以返回字符串;
- 模板字符串: 保留换行符,且每行开头以“\n”开头;
- 字符串插值: 模板字符串,使用${} 插入变量,以前要用“+”号拼接,
Symbol
BigInt
Object
数据类型检测方法汇总
- typeof 操作符
- instanceof 操作符
typeof操作符
// 省略console.log()
typeof 'string' // string
检测类型函数的封装
class Typeof{
}