js数据类型回顾
简单数据类型: undefined null boolean number string
复杂数据类型: object
Undefined
js中变量声明,用关键字var , 如果声明了变量但没有赋值,该变量默认值就是undefined。
例如: var hello; hello的值为undefined
如果使用了没有声明的变量, 就会直接报错
Null
null表示一个空对象指针,如果定义的变量将来用于存放对象, 可以给该变量初始化为null
例如: var obj = null ;
实际应用中我们还可以给对象赋值null,来清空一个对象:
var json = {“id”:1, “name”:”呵呵嗒”} ;
json = null ;
undefined与null的关系:
undefined派生自null ,相等测试时返回的是true:
alert(undefined == null) // true
虽然相等,但是undefined表示没有赋值的变量, null表示空对象用于将来要存放的对象,它们是不同类型的值,全等测试时返回false:
alert( undefined === null ) // false
Boolean
boolean类型有两个值true和false , Boolean()函数可以将其它类型的值转为布尔类型,转换规则:
数据类型 | 转换为true的值 | 转换为false的值 |
---|---|---|
boolean | true | false |
number | 任何非零数字值 | 0和NaN |
string | 任何非空字符串 | “”(空字符串) |
object | 任何对象 | null |
undefined | 无 | undefined |
我们也可以用双逻辑非来转换布尔值:
!!”” //false
!!0 //false
!!NaN //false
!!null //false
!!undefined //false
javascript中boolean类型在流程控制语句中很重要,实际应用中我们会经常将其它类型转换成布尔类型。
Number
number有整数和浮点数
整数 可以由 十进制 八进制 十六进制 字面值表示:
var num = 666; //十进制666
var num = 070; //八进制56
var num = 079; //无效八进制, 解析为79
var num = 0xA; //十六进制的10
浮点数就是我们所说的小数:
var float = 3.14 ;
对于极大或极小的浮点数可以用e表示法,即科学计数法:
var float = 3.14e6 ; //等于3140000
var float = 3.14e-6 ; //等于0.00000314
浮点数的最高精度为17位小数, 浮点数的计算会产生舍入误差:
0.1+0.2 //等于 0.30000000000000004
0.1+0.7 //等于 0.7999999999999999
数值范围:
ECMAscript中最小值保存在Number.MIN_VALUE 中,最大值保存在MAX_VALUE中,超出这个范围的数值都会被转换成Infinity值,这个值是正数转换成Infinity(正无穷),负数转换成-Infinity(负无穷)
NaN: NaN表示非数值(Not a Number)。0除以0会返回NaN; NaN与任何值都不相等,包括NaN本身。我们可以用isNaN()来判断一个值是否’不是一个数值’例如:
0/0 //等于NaN
NaN == NaN //false
正数/0 //Infinity
负数/0 //-Infinity
isNaN(NaN) //true
isNaN(‘hello’) //true
isNaN(true) //false
数值转换: Number() parseInt() parseFloat()
parseInt()比较常用,转换规则:
null undefined 以及对象 直接返回NaN
浮点数 直接取整数部分, 如: parseInt(3.14) //返回3
字符串 如果第一个字符是除正负符号和数字以外的字符,直接返回NaN 如:parseInt(‘a123’) //返回NaN
否则一直往下找,直到碰到非数字字符为止, 当起始字符是”0x”的时直接十六进制转换
当起始字符是”0”时, ECMAscript允许以八进制转换, 不指定进制默认转十进制
parseInt('18hello') //返回18 parseInt('020') //返回20 parseInt('020',8) //返回16 parseInt('0xA') //返回10
实际应用中,我们通常是要转为十进制, 因此我们最好指定进制,如:parseInt(‘3.14’,10)
String
string类型,即字符串,用于表示0个或多个16位Unicode字符组成的序列。
创建字符串有三种方式:
var str1 = 'hello';
var str2 = String('hello');
var str3 = new String('hello');
以上创建字符串方式的区别: str1 str2 str3虽然相等,但他们有区别的:
typeof str1 //'string' str1 instanceof Object //false str1 instanceof String //false typeof str2 //'string' str2 instanceof Object //false str2 instanceof String //false typeof str3 //'object' str3 instanceof Object //true str3 instanceof String //true
以上可以看出,str1和str3类型上就不同, 而str2是将其它类型转换为string类型,除此之外跟str1没有区别。
转换为字符串: String()函数能将任何类型的值转换为字符串,包括null转为’null’,undefined转为’undefined’, 也可以将空字符串(“”)加在一起,效果一样。
Object
ECMAscript中对象是一组数据和功能的集合。[详细的下回详解]