JS数据类型
先言简意赅,JS一共一共只有7种数据类型,分别是
Number,String,Boolean,Symbol,null,undefined,Object(对象)
是的你没看错,null和undefined是数据类型,且这个数据类型只有一个值,就是本身2333
- Number
JS里是没有int和float和double的区别的,Number即代表任何数字。
因为JS内部,所有数字都是以64位浮点数存储,即使整数也如此,所以1
和1.0
是相同的,一样样的
1 === 1.0//true
由于浮点数不是精确的值,所以设计小数的运算会有一些奇葩的现象
0.1 + 0.2 === 0.3//false
0.3 / 0.1 //2.99999999999
js能表示的数值范围为21024到2-1023
- String
String就是一串字符串
其中字符串分多行打需要格外注意
var s = '123456
7890'//直接报错
var s = '123456\
7890'//可以,但不推荐,因为若反斜杠后面多打了空格,反斜杠会和第一个空格匹配,转义成空格,就不存在哪个反斜杠符号了
var s = '12345'+
'67890'//好读的语法,推荐
若就是想打有多行的字符串呢
可以用ES6的新语法
var s = `12345
67890`
//打印出来就是12345
67890
//这个语法类似于Python里的``` ```
- null和undefined的区别
区别有两点:
- 若一个变量没有值——undefined
- 有个对象object,现在不想赋值——null var obj = null
有一个非对象,不想赋值——undefined var n = undefined
- 对象
对象有两点需要注意
- 要记住:对象即哈希
var person = {name:"Jack',age:22}
person.age ===22
person["age"] ===22
person[age]//报错!
只有字符串才能做对象的key,js是自动把所有的key都转化成了字符串了
若我们自己定义的时候不加引号,则key要符合标识符规范,若加了引号可以随意
delete person.name//删除了key和value
person.name = undefined//只删除了value
- Boolean
就是true和false - Symbol
是ES6的新数据类型,在这里不做讨论
JS数据类型转换
数据类型转换一般来说只有三个是有意义的
- 其它数据类型转成String
- 其它数据类型转成Number
- 其它数据类型转成Boolean
其它数据类型转成String
- 调用toString()方法
但是注意null和undefined调用会报错
(11).toString()//'11'
true.toString()//'true'
null.toString()//报错
undefined.toString()//报错
{}.toString//"[object Object]"
- 调用全局函数String()
这个函数厉害,null和undefined扔进去也不会报错
String(11)//'11'
String(undefined)//'undefined'
- 最常用的一种:加上一个空字符串
1 + ''//'1'
null + ''//'null'
原理其实是加号两边出现了非String类型时,系统会自动地调用String()函数来转化
其它数据类型转成Number
- parseInt和parseFloat
parseInt(" 222 3")//222
parseFloat(" 22.33a 4")//22.33
parseInt和parseFloat强大之处在于从能parse的地方开始parse到不能parse为止
- Number()
Number(" 111 ")//111
Number(" 11 aa")//NaN
Number的不足之处就在于字符串里出现非空格和数字的字符时就不好使了,直接返回NaN
- 0大法
'1' - 0//1
- 大法
+ '1'//1
+ " 11.23 "/11.23
总结:这4种方法都能自动过滤字符串前后的空格,但只有parseInt和parseFloat能稍微处理奇怪的字符
其它数据类型转成Boolean
先记住js里只有5个falsy值:null
,0
,''
,undefined
,NaN
!!
任何对象包括{}
空对象都是true的!!
- Boolean()
- !!大法(推荐)
!!"333"//true
!!3//true
!!{}//true
网友评论