JavaScript中的 原始类型 一(Undefined, Null,Boolean,Number)

773 阅读5分钟

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 = nullconsole.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 的值
Booleantruefalse
String非空字符串""空字符串
Number非零数值(包括无穷值)0,NaN
Object任意对象null
UndefinedN/A (不存在)undefined

Number 类型

Number 的多进制表示

let octalNum = 070 // 以0开头的数字,表示8进制(严格模式下,八进制的这种表示无效),该数值表示56
let hexNum = )0xA // 以0x开头的数字,表示16进制,该数值表示10。

多进制的数值,在被运算符计算时,都被视为 十进制数值。

Number 中的浮点值

要定义浮点值,数值中必须包含小数点,而且小数点后面必须至少有一个数字,如果小数点后面只有一个0,这个数值会被默认处理成整数。

let floatNum = 1.1let floatNum2 = 0.1let 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
不接受第二个进制的参数

编写不易,欢迎点赞👍👍👍

水平有限,欢迎评论指出,共同进步🤌🤌🤌