ECMAScript中有5种简单数据类型(即基本数据类型)和一种复杂数据类型,因为ECMAScript数据类型具有动态性,最终所有值都会是上述6种类型之一,因此6种数据类型已然足够。
- 什么是数据类型具有动态性?
数据的动态类型是指在js中无需过于关注数据类型,统一使用var关键字,声明后可以为之赋予不同的类型,若发生数据类型的错误会在编译时检查出来。
5种基本数据类型
01-Undefined类型
Undefined类型只有一个值即为undefined,当你声明一个变量但未初始化即为undefined。
此处注意未初始化时为undefined,但未定义将会报错而非undefined。
<script>
var message = 0
var message1
console.log(message); //定义且初始化
console.log(message1); //定义未初始化
console.log(message2); //未定义
</script>
02-Null类型
Null类型是第二个仅具有一个值的数据类型,在逻辑上Null类型表示为空对象指针,所以如果赋值null时该值会表现为一个object,同时在此值得一提的是,在undefined与null的的相等性测试当中结果为,undefined==null为true,其原因是undefined值其实派生于null值,但是他们的用途完全不同,前面我们介绍过undefined是表示未初始化,而Null意在保存一个对象的变量还没有真正的保存对象,即上述所说的空对象指针
console.log(Boolean(null==undefined)); //true
03-Boolean类型(布尔类型)
在ECMAScript中,该类型只有两个字面值即:true和false,此处需注意仅有true和flase,即True和False都不是Boolean值,只是标识符。
虽然Boolean类型仅有两个字面值,但是每一个类型的值都有与之等价的值,可通过Boolean()(转型函数)来检查。下表罗列出各数据类型与Boolean类型的转化规则
04-Number类型
在Number类型中大致被分为了整型和浮点数值(双精度数值)以及NaN
-
整型
在整型中最基本的字面量就是十进制数,也是我们常见的数值,十进制的数值可以直接在代码中输入,这里需要提到的是其他进制,首先是八进制,八进制在表示中以前导零来表示例如017即为十进制的15。但众所周知,八进制的取值范围为(0~7),当超出范围时,前导零会被省略,同时后续数值按十进制解析,并且会在书写代码时报错。
var num = 10 //十进制 10
var num1 = 077 // 八进制 63
var num2 = 019 //八进制 19
十六进制:
十六进制的字面值前两位为0x,后续十六进制数字取值范围为(0~9&&A~F),字母可以大写也可以小写。同时此处值得一提的是当在计算时,不论十六进制还是八进制最终都会转化为十进制。
var num3 = 0xA //十六进制 10
var num4 = 0xa //十六进制 10
var num5 = 0x2f //十六进制 47
//计算
num = num1 + num3
console.log(num); //num1 077 63(八进制) + num3 0xA 10(十六进制) = 73(十进制)
-
浮点数值(双精度数值)
所谓浮点数值,即必须包含一个小数,且必有至少一位数字,不写小数点前的数字可以,但不推荐同时保存浮点型的空间是整型的两倍,如果小数点后没有任何数字那么这个数会自动被保存为整数值来保存。或者小数点后为0也会被保存为整数。
var num = 1.2 //1.2
var num1 = 1. //1=
var num2 = 1.0 //1
这里必须要提到的是浮点型在进行算术计算时会出现的偏差,这是因为计算机使用的二进制进行储存,而十进制的数在计算机二进制会显示为一个无限位的小数。所以会表现为
拓展:在ECMAScript中最小值为5e-324,最大值1.79...57e+308,超过这个范围会被表示为无穷小或者无穷大,即-Infinity与+Infinity。
-
NaN(Not a Number)
NaN为非数值,这是一个特殊的数值,例如某个数除以0即为NaN,但注意在其他语言里可能就会直接导致代码停止运行。且任何涉及NaN的操作最后的值都是NaN,包括NaN甚至!=NaN。
这里需注意一个函数即 isNaN()
isNaN()用于判定是不是数值,或者说可以不可以为数值。是为false 不是为true
console.log(Boolean(NaN == NaN)); //false
isNaN(10) //false
isNaN(NaN) //true
isNaN('10') //false
isNaN(true) //false
isNaN('ttt') //true
值得一提的是isNaN函数也适用于对象,在作用于对象时会先调用valueof()来查看返回值,且看其是否可以转化为数值,如果不能在调用tostring(),再测试返回值。
05-String 类型
String类型即为字符串,由零到多个16位Unicode字符组成的字符序列。可以用''或者""。
String类型中包含一些特殊的字符字面量,即转义序列。如下表
这些字符字面量在字符串中的任何一个位置都被作为一个字符来解析。
1种复杂数据类型
01-Object类型
可以说Object类型是JavaScript中的顶级数据类型.在JavaScript绝大多数高级类型对象都是object类型,说到底其实对象就是数据和功能的集合,通过创建Object类型的实例化来为其添加属性或者方法。
- 常见的创建Object对象
var object = new Object(); // 对象实例化
var b = {
name:'张三' //字面量声明
}