JS中的基本类型有哪些?
JS中有5种基本类型:数字、字符、布尔值、undefined、null。除了基本类型之外,其他的都是非基本类型(对象类型:object)
null 和 undefined的一些细节
当我们试图访问一个不存在的变量或者一个未初始化的变量时,就会得到一个特殊的值:undefined。Javascript会自动在变量初始化之前自动将值设置为null。而所谓的null值,一般是指没有值、空值,不代表任何东西,null与undefined最大的不同在于,被赋值的null通常被认为是已定义的变量,只不过它不代表任何东西。
var temp; typeof temp ------> "undefined"
null与它是完全另外一回事,它不会自动赋值:
var temp = null; typeof temp ------> "object"
这是因为null和undefined在转换成其他的类型时,方法上存在一定的差别,下面列出一些可能的类型转换:
var i = 1 + undefined ; ------> NaN
var i = 1 + null ; ------> 1
1 * undefined; ------> NaN
1 * null ; ------> 0
!!undefined ; ------> false;
!!null ; ------> false
"" + null ; ------> "null"
"" + undefined ; ------> "undefined"
typeof操作细节
如果我们想看某个变量或者数值的类型,可以使用特殊字符typeof,该操作符会返回一个数据类型的字符串,它的值包括:
“number”、”string”、”boolean”、“undefined”、”object”和“function”
NaN操作细节
NaN ,尽管这个字符看起来有点特殊,但事实上它属于数字,不过是一种特殊的数字罢了。
typeof NaN ; ------> "number"
如果我们在对一个假定的数字执行某个数字操作失败时,就会得到一个NaN。例如:当我们试图将10与 f相乘时其结果就会是NaN
10 * f ; ------> NaN
而且,NaN是具有传染性的,只要我们算术运算符中存在一个NaN,整个运算都会失败
1 + 2 + NaN ; ------> NaN
结合typeof和undefined判断一个变量是否存在
if(typeof temp != "undefined"){
}
boolean操作细节
boolean ,使用双重取反操作很容易将任何值转换成对应的boolean值,例如:
var temp = "temp" ;
!!temp ;
------> true
除了以下几种特殊的值在转换成boolean值时会得到false,其余大部分值在转换成boolean时都是得到true:
null
undefined
空字符串 ""
数字 0
数字 NaN
布尔值 false
惰性求值,就是短路原则。这里需要注意的是:在js中,如果一个逻辑表达式遇到一个非boolean类型的操作数,那么该操作数的值就会成为该表达式的返回结果
true || "temp" ; ------> true
true && "temp" ; ------> "temp"
false || "temp" ; ------> "temp"
但是这种情况有时候也不安全,比如 :
var temp = 0 ;
temp = temp || 10 ;
------> 10
如果temp 为上面6个值得一个,结果有时候会不如愿。
比较运算符 ==与=== (!= 与 !== )
- 运算符 == , 在比较操作执行之前,两边的操作数会自动转换成相同的类型。
- 运算符 === , 这种比较更可靠,因为它不存在类型自动转换。
例如:
1 == '1' ; ------> true
1 === '1' ; ------> false
运算符 != 与 !== 和 == 与=== 类似。