ECMAScript有6种简单数据类型(也称原始类型):Undefined,Null,Boolean,Number,String,和Symbol。Symbol(符号是ECMAScript 6新增的。)还有一种复杂数据类型叫Object(对象)。Object 是一种无序键值对的组合。ECMAScript 中不能定义自己的数据类型,所有值都可以用上述7种数据类型之一来表示。
怎么判断一个变量的数据类型? (typeof 操作符)
对于一个值使用typeof 操作符会返回以下的字符串之一。
“undefined":表示值未定义
“boolean”:表示值为布尔值
“string”:表示值为字符串
“number“:表示值为数值
“object“: 表示值为对象(而不是函数)或null
“function”:表示值为函数
“symbol”:表示值为符号
Undefined 类型
Undefined 类型只有一个值,就是特殊值undefined。
当使用var或者let 声明了变量但没有初始化时,就相当于给这个变量赋予了undefined值。
let message;
console.log(message == undefined);// true
一个声明但没有初始化的变量和一个未声明的变量的区别
let message;
// 确保没有声明age
// let age
console.log(message) // undefined
console.log(age) //报错
对于没有声明的变量和声明但没有初始化的变量,typeof 操作符返回的值都是undefined。
let message;
// 确保没有声明age
// let age
console.log(typeof message) // “undefined”
console.log(typeof age) // “undefined”
永远不要显示的指定一个值为undefined,最好是在声明时就赋值。
Null 类型
Null 类型同样只有一个值,即特殊值null。逻辑上,null值表示一个空对象指针。这也是给typeof 传一个null会返回“object”的原因。
let car = null。
console.log(typeof null) //"object"
undeifned 和 null 当使用 “==”判断时,两者相等。
严格意义上两者时不相等的,但 “==”操作符在判断时,会进行隐式类型转换。
console.log(null == undefined) // true
任何时候,只要变量要保持对象,而当时又没有对象可保存,就要使用null 来填充该变量。这样就可以保持null是空对象指针的语义,并进一步将其与undefined 区分开来。
Boolean 类型
Boolean 类型有两个字面值,true 和false。
两个布尔值不同于数值,因此true 不等于1,false 不等于0.
布尔值字面量区分大小写,因此True 和False 是有效的标志符,但不是布尔值。
Boolean() 转化方法
数据类型 | 转换为true 的值 | 转化为false 的值 |
---|---|---|
Boolean | true | false |
String | 非空字符串 | ""空字符串 |
Number | 非零数值(包括无穷值) | 0,NaN |
Object | 任意对象 | null |
Undefined | N/A (不存在) | undefined |
Number 类型
Number 的多进制表示
let octalNum = 070 // 以0开头的数字,表示8进制(严格模式下,八进制的这种表示无效),该数值表示56
let hexNum = )0xA // 以0x开头的数字,表示16进制,该数值表示10。
多进制的数值,在被运算符计算时,都被视为 十进制数值。
Number 中的浮点值
要定义浮点值,数值中必须包含小数点,而且小数点后面必须至少有一个数字,如果小数点后面只有一个0,这个数值会被默认处理成整数。
let floatNum = 1.1;
let floatNum2 = 0.1;
let floatNum3 = 1.0;/会被处理成 整数1 处理。
浮点类型中的 科学计数法
对于非常大或者非常小的数值,浮点值可以用科学计数法来表示。
科学计数法用于表示一个应该乘以10的给定次幂的数值。
let floatNum = 3.125e7 // 表示31250000
let floatNum2 = 3e-17 // 表示 0.000 000 000 000 000 03 // (小数点后面默认至少包含6个零的浮点值)
浮点值的计算并不准确
let a = 0.2,b = 0.1
if(a + b == 0.3){
//不会走该语句
}
Number 值的范围
最小值,保存在Number.MIN_VALUE中,在浏览器中的值是5e-324,最大值保存在Number.MAX_VALUE中,在浏览器中的值是1.7976931348623157e+308.
如果在计算中的值超过了最大最小值,用Infinity表示。整数用Infininity表示,负数用-Infinity表示。
isFinite()函数用于测试某个值是不是有限大,返回布尔值。
NaN
有一个特殊的数值叫做NaN,意思是不是数值,用于表示本来要返回数值的操作失败了(而不是抛出错误)。比如用0除以任何数值在其他语言都会导致错误,从而终止代码执行。但在ECMAScript 中,0,+0,-0,相除会返回NaN。
NaN 不等于包括NaN在内的任何值。
isNaN()函数 用于测试一个数值是否是NaN值。
数值转换
有3个函数可以将非数值转换为数值:Number(),parseInt()和parseFloat().
Number 是转型函数,可用于任何数据类型。
parseInt()和parseFloat() 主要用于将字符串转化为数值。
Number()函数转换规则
布尔值,true 转化为1,false 转化为0
数值,直接返回
null,返回0
undefined,返回NaN
字符串转换:
字符串以数字开头的,从数字开始截止到非数字字符,进行转化
浮点数,也会正常进行转化。
16进制数会返回对应的十进制数
空字符串返回 0
非上述情况返回 NaN
对象,调用valueOf()方法,按照上述规则转化。
parseInt()函数转换规则
字符最前面的空格会被忽略,从第一个非空字符串开始转换。如果第一个字符不是数字字符,加号或者减号,parseInt()立即返回NaN。
parseInt()也接收第二个参数,用于指定底数(进制数)。
let num1 = parseInt("10",2) // 2,//2进制解析
let num1 = parseInt("10",8)//8,//8进制解析
let num1 = parseInt("10",10)//10 // 10进制解析
let num1 = parseInt("10",16)//16,16进制解析
parseFloat()解析规则
其他规则同parseInt().
需要注意的是 只解析字符串中出现的 第一个小数点。
不能解析多进制数,16进制数,默认返回0.
对于整数加小数点的形式,如1.0,会解析返回整数1
不接受第二个进制的参数。
编写不易,欢迎点赞👍👍👍
水平有限,欢迎评论指出,共同进步🤌🤌🤌