JS中的数据类型一共有7种:
- 基本类型(简单类型):数值(number)、字符串(string)、布尔值(boolean)、Symbol(ES6种新增的一种)、null、undefined。
- 复杂类型(由简单类型组成):对象(object)。
数值(number)
- 整数与浮点数:JavaScript内部,所有数字都是以64位浮点数形式储存。
- 数值精度:JavaScript 浮点数的64个二进制位,从最左边开始,是这样组成的。
- 第1位:符号位,
0
表示正数,1
表示负数,决定一个数的正负。 - 第2位到第12位(共11位):指数部分,决定数值的大小。
JavaScript 能够表示的数值范围为2的1024次方到2的-1023次方(开区间),超出这个范围的数无法表示。 - 第13位到第64位(共52位):小数部分(即有效数字),决定数值的精度。
精度最多只能到53个二进制位,绝对值小于等于2的53次方的整数,即-253到253,都可以精确表示。
- 第1位:符号位,
- 数值的表示方法:
- 十进制:没有前导0的数值。
- 八进制:有前缀
0o
或0O
的数值,或者有前导0、且只用到0-7的八个阿拉伯数字的数值。0xff // 255
- 十六进制:有前缀
0x
或0X
的数值。0o377 // 255
- 二进制:有前缀
0b
或0B
的数值。0b11 // 3
- 科学计数法:科学计数法允许字母e或E的后面,跟着一个整数,表示这个数值的指数部分。
123e3 // 12300
、123e-3 // 0.123
- NaN:非数字,主要出现在将字符串解析成数字出现错误的场合。
5-'x' // NaN
NaN不等于任何值,包括它本身。 - 数值相关的方法:
-
parseInt()
将字符串转为整数,接收第二个参数(2~36),被解析值的进制。 -
parseFloar()
将一个字符串转为浮点数。 -
isNaN()
判断一个值是否为NaN。 -
isFinite()
返回一个布尔值,判断这只是否为正常的数值。除了Infinity
、-Infinity
、NaN
和undefined
这几个值会返回false
,isFinite
对于其他的数值都会返回true
。
-
字符串(string)
字符串就是零个或多个排在一起的字符,放在单引号或双引号之中。
- 多行字符串实现:(字符串默认只能写在一行内。)
- 可以在每行末尾使用反斜杠。
- 使用运算符
+
- 运用多行注释的变通方法
- ES6中添加一个方式,键盘1旁边的符号包围字符串,默认单行字符串末尾有空格
var a = `1234 6789` a.lenth = 9
- 反斜杠(\)转义符,在某些字符前面表示特殊含义,如
\n
表示换行。 - 字符串可以被视为字符数组,可以使用数组的方括号运算符,用来返回某个位置的字符(位置编号从0开始),但是无法改变字符串。
-
length
属性返回字符串的长度,也是无法改变的。 - 字符串中存在unicod字符时,会自动转为字面进行识别。
布尔值、null与undefined
- 布尔值只有“真(true)”与“假(false)”两个状态。
- 常用操作符:
&&
与(两者均为真);||
或(其中一者为真);!
非(相反); -
undefined
,null
,false
,0
,NaN
,''、
""(空字符串)如果是布尔值会被转为
false,其余都会被转为
true`. - 空数组([])、空对象({})对应的布尔值都是
true
.
- 常用操作符:
- null 和 undefined很相似,都可以表示“没有”
区别:- a. 变量没有赋值----undefined。
b. 有一个对象object,不想赋值----null。
有一个非对象,不想赋值----undefined(这两个是推荐用法,惯例)。 -
null
表示“空值”,undefined
表示“未定义”。
- a. 变量没有赋值----undefined。
对象(object)
对象是一组“键名-键值对”(key-value)的集合,是一种无序的复合数据集合,可以理解为哈希表。{'key':'value','key':'value','key':'value',·······}
- 键名与键值:
- 键名是数值则会自动转为字符串
- 如果键名不符合标识名的条件(比如第一个字符为数字,或者含有空格或运算符),且也不是数字,则必须加上引号,否则会报错。
- 对象的每一个键名又称为“属性”(property),它的“键值”可以是任何数据
- 属性的相关操作:
- 读取:两种方法:
a.点运算符obj.p
,数字键不能使用点运算符。
b.方括号运算符obj['p']
。
方括号内部可以使用表达式。
数字键不加引号会自动转成字符串。 - 赋值:
obj.foo = 'hello'
,obj['foo'] = 'hello'
。 - 查看:使用
Object.keys
查看一个对象本身的所有属性。 - 删除:使用
delete
命令即可删除一个属性,delete pbj.p // true
,删除成功返回true。 - 属性是否存在:
in
运算符。'toString' in obj
,但是不能识别哪些属性是对象自身的,哪些属性是继承的。利用hasOwnPorperty方法判断,是否为自身属性。 - 属性遍历:利用
for...in
循环。- 它遍历的是对象所有可遍历(enumerable)的属性,会跳过不可遍历的属性。
- 它不仅遍历对象自身的属性,还遍历继承的属性。
- 读取:两种方法:
- with语句:格式如下:
with (对象){ 语句; }
作用:操作同一个对象的多个属性时,提供一些书写的方便。(少用)