目录
背景
JavaScript的数据类型分为两类,原始类型(primitive type)和对象类(object type)
js中的原始类型包括数字,字符串,布尔值
js中有两个特殊的原始值: null
(空)和undefined
(未定义).它们代表了各自特殊类型的唯一成员
对象类是属性(property)的集合,每个属性都由"key/value".其中有一个比较特殊的对象----全局对象(global object)
js同样定义了一种特殊对象--数组(array),表示带有编号的有序集合
js还定义了特殊的对象----函数,函数是真值,并且js将它们当作普通对象对待
如果函数用来初始化(使用new运算符)一个新建的对象,则称为构建函数(constructor)
每个构造函数定义了一类(class)对象----由构建函数初始化的对象组成的集合
类可以看作是对象类型的子类型
除了数组和函数外,js定义了其他三种有用的类
代表日期的对象
Date
表示正则表达式
RegExp
错误
Error
js解释器有自己的内存管理机制,可以自动对构建的内存进行垃圾回收(garbage collection).这意味着程序可以按需创建对象,当不再有任何引用指向一个对象,解释器会回收它所占用的资源
假设我们有一个数组 a,其元素可以通过数组本身的方法来操作,而不是通过全局函数来处理
let a = [3, 1, 4, 1, 5, 9];
a.sort(); // 调用数组对象的 sort() 方法
console.log(a); // 输出: [1, 1, 3, 4, 5, 9]
只有js对象才能拥有方法,数字,字符串,布尔值也可以拥有自己的方法.
js中只有null
和undefined
无法拥有方法的值
js可以分为拥有方法的类型和不拥有方法的类型
同样可分为可变类型
和不可变类型
可变类型: 对象
,数组
js程序可以更改对象属性值和数组元素值
不可变类型: 数字
,布尔值
,null
,undefined
,字符串
属于不可变类型
字符串可以看作是由字符组成的数组,但是在js中字符串
不可变
js可以自由地进行数据类型转换
js的变量是无类型的,变量可以是任何值,同一个变量可以重复赋予任何值
使用var声明变量,js使用词法作用域
不在任何函数内声明的变量叫做全局变量,在任何js程序中可见
函数内部声明的变量具有函数作用域,并且只在函数内可见
数字
js不区分整数和浮点数,均用浮点数表示
当一个数字出现在js中,称为数字直接量
js支持多种格式的数字直接量,负号是一元求反运算符
整型直接量
在js中,用一个数字序列表示10进制整数
0
3
10000
十六进制是以0x
或0X
为前缀,其后为十六进制数字的直接量
0xff // 15*16 + 15 = 255 (十进制)
0xCAFE911
八进制直接量以数字0开始,其后跟随一个由0~7(包括0和7)之间的数字组成
ECMAScript 6的严格模式下,八进制直接量是禁止的
0377 // 3*64 + 7*8 + 7 = 255 (十进制)
浮点型直接量
浮点型直接量可以含有小数点,它们采用的是传统的实数写法。一个实数由整数部分、小数点和小数部分组成
还可以使用指数记数法表示浮点型直接量,即在实数后跟字母e或E,后面再跟正负号,其后再加一个整型的指数。这种记数方法表示的数值,是由前面的实数乘以10的指数次幂
[digits][.digits][(E|e)[(+|-)]digits]
3.14
2345.789
.333333333333333333
6.02e23 // 6.02×1023
1.4738223E-32 // 1.4738223×10-32