![4d287dfc3860d08f6904051b956becc7.png](https://i-blog.csdnimg.cn/blog_migrate/40e0ba8a45ebedba129b6d8509aeefc6.jpeg)
JS里共有七种数据类型,分别是number(数值),string(字符串),boolean(布尔型),symbol,undefined,null,object(对象)。
number
C语言和java中都将数值类型分为了int(整型)和float(浮点型等,js里没再细分,只有一个number类型,表示所有数值。
js里所有数都是以64位浮点数的形式储存的,所有1和1.0是相同的数。
另外,js里的数可以用科学计数法表示,例如100可表示成1e2
,e
大小写均可。
string
js中的字符串两端要带引号,单双引号均可,若字符串中含有引号,为避免干扰,可以在字符串中的引号前面加转义符。
boolean
包括两个取值:true
和false
。
如果 JavaScript 预期某个位置应该是布尔值,会将该位置上现有的值自动转为布尔值。转换规则是除了下面六个值被转为false,其他值都视为true。
undefined
null
false
0
NaN
""或''(空字符串)
请注意,空数组[]
和空对象{}
在转换后也相当于true。
symbol
由于symbol对我们接下来的学习影响很小,所以暂不介绍。
undefined和null
这两种数据类型的效果很相似。在if语句中,都会被转为false
。==
更是直接报告二者是相等的。
但是,二者也有些细微的差别。根据js语法可知,变量没有值时,等于undefined
。
根据惯例,有一个对象,定义时不想同时赋值,可用var obj=null;
;有一个非对象,定义时不想赋值,可用var obj;
,此时obj等于undefined
。
而且,null
表示“空”,转为数字时是0。
Number(null) //0
5+null //5
undefined
表示“此处无定义”,转为数字时为NaN。
Number(undefined) //NaN
5+undefined //NaN
object
上面六种数据类型皆是简单类型,object(对象)是复杂类型。
object包括狭义的object,数组array以及函数function。
一般而言,狭义的object即是指哈希表,由“键值对”组成。
var person={
name:'jordan',
age:18,
married:true,
children:{name:'xxx',age:1},
'':'haha',
'9a':'ha',
167:145,
}
object的键全是字符串,所以带不带引号均可。注意,键可以为数值,是因为数值自动转化为字符串了。'9a'
这个键必须带引号,因为它不符合标识符的命名方式,数字在前面,字母在后面,因此必须加引号。
空字符串''
也可以作为键。
读取键值
若要读取键值,有两种方法:一种是方括号运算符parson['name']
(这里的引号必须得加);一种是点运算符,person.name
(键的命名方式必须符合标识符的命名方式,且纯数字也不行)。
删除键
删除键可用delete
。
delete person['name'] //true
person.name //undefined
'name' in person //false
delete
将键和值同时删除。另一种方法person['name']=undefined
只是将value定义为undefined,key仍然存在。
for...in
for...in循环遍历一个对象的全部属性,会跳过不可遍历的属性,会同时遍历对象自身的属性和继承的属性。
for(var key in person){
console.log(key,person[key]);
}
上面的循环顺序是随机的。person[key]
不能写成person.key
(因为person.key
相当于person['key']
)。