想复习下之前学的js数据类型的知识,主要是总结一下针对string和数组的各种操作。
一,javascript有5种数据类型。
1.Undefined(未定义)
2.Null
3.Boolean(布尔值,true or false)
4.Number(数值,例如1)
5.String(字符串)
6.Object(对象)
二,typeof操作符
用来检测数据类型的操作符(不是函数),会根据值的数据类型的不同返回不同的值。
undefined-如果这个值未定义
boolean-如果这个值是布尔值
string-如果这个值是字符串
number-如果这个值是数值
object-如果这个值是对象或者null,因为null指向的是一个空的对象指针,所以typeof会返回object而不是null。
function-如果这个值是函数
三,各种数据类型
1.Undefined
这个类型只有一个值,就是undefined,在声明了变量但还未赋值的时候,这个就是undefined。例如:
var message;
typeof(message) //undefined
2.Null类型
这个类型也是只有一个值,null,从逻辑上说,这个指向一个空的对象。所以用
var call = null;
typeof(call)//object
所以,如果要用使用对象,可以先声明它等于null。
3.Boolean类型(这个着重说一下JS布尔值的自动转换)
有true和false两种,要区分大小写,True和False只是标识符。
有一个转换函数Boolean(),可以将其它数据类型转换为布尔值。
数据类型 转换为true 转换为false
字符串 任何非空字符串 “”(空字符串)
Number 任何非零字符串 0和NaN
Object 任何对象 null
Udefined 不能转换为true undefined
对于if(message)中的message会自动执行布尔值转换。
还有一些操作符比如,===,==,>=等也会先进行布尔值转换,运算出来的结果可能有点奇怪。下面有个我不知道在哪找到存手机的真值表。可以时常拿出来看看。
3.Number类型
浮点运算采用双精度数值(IEEE754格式),会出现0.1+0.2 != 0.3的情况!
其实是等于0.30000000000000004,为什么会这样呢?这里稍微提下,是因为都会先将小数转换为双精度对应格式的二进制然后做加法,最后再转换回来。具体计算方式这里不赘述了,有兴趣的可以看看这个双精度浮点数运算
进制表示方法
十进制:55,
八进制:070(8进制的56)8进制前面加0,不能超过8,08会自动解析为8。但在严格模式下无法识别,ES6新增了0o的表示方法。
十六进制:0xA,16进制的10。0-9,A-F。
内存限制,最小值,5e-324,最大值1.7976931348623157e+308,如果超出这个范围,正数则是正无穷Infinity(Number.MAX_VALUE),负数则是负无穷-Infinity,正负无穷无法参加下一次运算。有一个函数可以确认是否有穷,是isFinite(),有穷返回true,无穷返回false。
NaN(Not a Number)
var result = 4/0 //NaN
需要注意的是NaN与任何值都不相等,包括它自己。很奇葩吧,如何判断是不是NaN呢?用isNaN()来判断就好了呀!这个函数会尝试把传进去的参数转换成为数值,不能转换就会返回true,比如字符串或者布尔值。
如何将其它数据类型转换为数值呢?JS提供了三个函数:Number(),parseInt(),parseFloat()。
Number(true)//1
Number(false)//0
Number(011)//9(8进制)
Number('02323') //2323,Number('') //0
Number('hello') //NaN,Number('')
Number(null) //0
Number(undefined) //NaN
一般处理正数的时候用parseInt()
parseInt('') //NaN
parseInt('123fdasfasf') //123
parseInt('agasdf') //NaN
parseInt(22.5) //22,向下取整数,只保留整数 Math.ceil(22.5)//向上取整,Math.round(22.4)//22 四舍五入
parseInt(070) //56 八进制
parseInt('070') //70并不会识别8进制哦
还可以添加第二个参数作为进制基数哦~就是把传入的第一个参数用后面一个参数规定的进制解析,比如:
parseInt(‘10’,2)//2
parseInt('0xf',16) //15可以识别哦~
parseInt('0o10',8) //0,但是8进制写法的字符串还是无法识别,就是不喜欢8进制,任性。
parseFloat()也是从第一个字符开始解析,一直解析到字符串的末尾或者遇到第一个无法识别的。第一个点有效,第二个就无效了哦,比如:
parseFloat('22.4.5.7')//22.4
parseFloat("2323dfdf") //2323 也是可以返回整数的哦
parseFloat('0xA') //返回0,16进制格式的字符串始终会被转换为0
4.String类型
需要注意的第一个就是转义序列
\n 代表换行;\t 制表;\b 空格;\r回车;\f 进纸(喵喵喵???不是很懂,是给打印机识别用的??);\\就是斜杠;\xnn 以16进制表示的一个字符,n为0-f;\unnn 以16进制代码nnn表示一个Unicode字符,要比nn表示的多。
console.log('\x44') //D
字符都有lenght属性,可以调用,查看字符长度,上面说到的\* 也是会算长度的哦~
中文字符也只算一个长度。
var a = '的等等';
console.log(a.length);//3
字符串和数值都是基础类型,创建了就不可变,要更改只能销毁重新分配储存空间。
转为字符串
使用toString()的方法转为字符串。
待更。。。
网友评论