一、typeof
typeof用来检测给定变量的数据类型的操作符。typeof 可能返回一下某个字符串:
- " undifined " ——如果这个值未定义
- " boolean "——如果这个值是布尔值
- " string " ——如果这个值是字符串
- " number " ——如果这个值是数字
- " object" ——如果这个值是对象或者null
- " function " ——如果这个值是函数
var text = "some string";
typeof (undefined); // " undefined "
typeof (null); // " object "
typeof (text) ; // " string "
typeof ([]) ; // " object "
typeof (true) ; // " boolean "
typeof 90 ; // " number "
typeof what // " undefined " (what 是未定义的变量)
需要注意的是当typeof检测的变量全加上引号的时候,那么他会认为所有变量都为 “string”(例如:“undefined”、“null”、“[1,2,3]”)
typeof操作符的操作数既可以是变量(text),也可以是数值字面量,typeof是一个操作符而不是函数,所以它的括号不是必须的,从最后两个例子中可以看出这一点。
可能有一点会领我们很疑惑,null是原始数据类型,为什么typeof会返回我们一个 object呢,其实这是一个历史遗留的问题,因为当时设计时,特殊值 null 被认为是一个空对象的引用。(JavaScript高级程序设计中的解释)
typeof 返回的是字符串 ! typeof返回的是字符串 ! typeof返回的是字符串 !(重要的事情说三遍)
alert ( typeof (typeof (undefined) ) // ?
如果你认为它打印出来的是 “undefined” ,那么请你在将typeof返回的是字符串读三遍
因为 typeof(undefined)返回的是 “undefined”,那么typeof(“undefined”)打印出来的应该是 “string”
二、类型转换
- 显式类型转换
- Number( mix ) 可用来转换所有类型值,它会忽略前导0,undefined 返回NaN,null 返回 0
- parseInt( string,radiux ) 用来转换字符串格式,第二参数为基数,表示把以基数为进制的字符串转换为十进制
- parseFloat( string ) 用来转换字符串格式,忽略前导0
- Boolean( )
- String( mix )
- toString ( radiux ) 是一个方法,需要点出来,例如 num.toString(),他是将一个十进制的数转换为以基数为进 制的数。
Number ("123") // 123
Number (456) // 456
Number ("abc") // NaN
Number ("123abc") // NaN
Number (true) // 1
Number (undefined) // NaN
Number (null) // 0
parseInt (123.456) // 123
parseInt ("123abc") // 123
parseInt ("true") // NaN
parseInt (15,16) // 21 (将 16进制的 15 转换为 10进制)
var num = 21;
num.toString(16) //15 (将 10进制的 21 转换为 16进制)
-
隐式类型转换
- isNaN ( ) 在转换时会先调用 Number (),然后在判断Number返回的值
++ / -- +/-(一元正负) 在转换时会先调用 Number (),然后在判断Number返回的值
+ 如果相加的数有一个字符,就会调用String(),将两个加数都变成字符串
* / - 在转换时会先调用 Number ()
&& || ! 转换为布尔值进行判断
== 会先转换为相同的类型在进行值的比较
< > <= >= 字符串和数字比较,会先转换为数字,数字优先
true > false // 1>0 true
"true" > false //false
NaN = NaN //false
undefined > 0 //false
undefined < 0 //false
undefined = 0 //false
null > 0 //false
null < 0 //false
null = 0 //false
undefined = null //true