JS中值可以分为七个类型,分别是数值(number),字符串(string),布尔值(boolean),undefined,null,对象(object)和ES6新增的symbol。
其中,数值、字符串、布尔值、undefined、null被称为基本数据类型,对象被称为复杂数据类型,即基本类型的集合,对象包括array和function。
数值(number)
JS中用64位浮点数的二进制来表示所有数值,JS能表示的范围为2^1024到2^-1023,如果超过最大范围,会返回Infinity(无穷),如果小于最小范围,会返回0。64位构成:
第1位:符号位,0表示正数,1表示负数;
第2位到第12位(共11位);指数部分;
第13位到第64位(共52位):小数部分(即有效数字)。
数值的表示方法:
科学计数法:允许字母e或者E后面跟着一个整数代表这个数值的指数,比如123e3表示123000;
二进制:前缀0b或0B;
八进制:前缀0o或0O,或者0+(0-7);
十进制:没有前导0;
十六进制:前缀0x或0X;
特殊数值:
1、正负0,基本相同,只有在表示符号位时,和当做分母时的返回值不一样。
2、NaN,表示非数字,主要出现在将字符串解析成数字出错的场合,数据类型依然属于number,不等于任何值,包括自身,和任何数的运算得到的都是NaN。
3、Infinity,表示无穷,用来表示两种场景:一正值太大,或负值太小;二非0除以0,得到Infinity。有正负之分,用来计算时,Infinity和正常非零数值进行加减乘除运算时,结果都是无穷,0乘以Infinity,返回NaN;0除以Infinity,返回0;Infinity除以0,返回Infinity;Infinity和自身做加乘运算返回自身,做减除运算返回NaN;和null计算时,null会被转成0来计算;和undefined计算,返回的都是NaN。
数据转换方法:
parseInt(字符串,进制);用于将字符串转为整数。转换方式是从第一个字符开始一个个转换,遇到不能转换成数字的字符就停下,只返回已经转好的部分,如果第一个就不能转换,返回NaN。头部有空格时会自动去除空格再转换,如果参数不是字符串,会先转成字符砖再转换。第二位参数可选,默认十进制,如果超出进制能表示的内容就只转能转的部分并返回。
parseFloat(字符串):用于将字符串转换为浮点数。转换规则也是一个一个转换,碰到不能转换的就停下,如果第一个字符就不能转返回NaN,且会将空字符串转为NaN,
字符串(string)
字符串就是零个或多个排在一起的字符,字符串的引用一般用单引号或双引号包裹起来,如果想要在字符串中添加特殊符号,比如单双引号本身,则需要在符号前加转义符\来表示,且一个字符串里不能直接使用换行符,同样需要在换行符前加\, 或者直接使用\n来表示换行。
\的特殊用法:
1、\HHH ,紧跟三个八进制数代表一个字符,比如\251表示版权符号,只能输出256种字符;
2、\xHH,\x后面紧跟两个十六进制数代表一个字符,同样只能输出256种字符;
3、\uXXXX,\u后面紧跟四个十六进制数代表一个字符。
字符串可以被视为字符数组,利用索引值来获取每一个字符,如果索引超过字符串长度或者不是数字,返回undefined,字符串内部单个字符无法通过这种方式该变或者删除,同时长度也无法更改。
undefined和null
undefined和null都可以表示没有,在用法上有区别。一般使用undefined来表示一个空的非对象,用null来表示一个空的对象。
布尔值(boolean)
布尔值只有两种结果:true和false,当出现运算符时结果会返回一个布尔值,如果预期某个位置应该是布尔值,会将现有的值转为布尔值输出,转换规则除了undefined、null、false、0、NaN、" "或""(空字符串)会被转为false,其他值都视为true。
对象(object)
对象是由键值对组成的无序复合数据组合,包含键名和键值,键值对之间用逗号分隔。一个对象,如果行首是大括号,就解释为语句,如果要解释为表达式,必须在大括号签加上圆括号。
键名:所有键名都是字符串,加不加引号可选,因为如果键名是数值,会被自动转为字符串,如果键名不符合标识符命名规则,则必须加引号。
属性:对象的属性读取,有两种方法,点运算符和方括号运算符。
var obj={p:hello,h:world};
console.log(obj.p);//hello
console.log(obj['h']);//world如果使用方括号运算,键名必须加引号,否则会被当做变量处理,数字键名可以不加引号,因为会自动转为字符串。点运算和方括号运算也可以用来给对象里的内容赋值。
对象操作:
查看一个对象的所有属性,可以使用Object.keys方法:
var obj={key1:hahah,key2:hehehh};
Object.keys(obj);//['keys','key2']delete:删除对象里的内容,可以使用delete命令,删除成功返回true,再读取被删除的属性会返回undefined,而且Object.keys方法的返回值里也不再包括该属性。但是如果删除一个不存在的属性,delete不会报错,且也返回true。delete只有在属性存在且不得删除的情况下才会返回false。
in:用于检查对象是否包含某个属性,检查的是键名不是键值,如果包含就返回true否则返回false。
for in:用来遍历一个对象的全部属性,遍历的是对象所有课遍历的属性,会跳过不可遍历的属性,包括自身属性和继承属性。
typeof方法确定数据类型:
typeof:可以返回一个值的数据类型,除了null会返回object,函数会返回function,其他几种都会返回自身的数据类型。