JavaScript数据类型

弱类型特征

32+32 // 64 加号加法运算
‘32’+32 // ‘3232’加号字符串拼接
‘32’- 32 // 0 减号减法运算

类型

原始类型

number
string
boolean
null
undefined

对象类型

object :function arrat date

总结:javascript 有6种数据类型 5种原始类型 1种对象类型。

隐式转换

等于 ==

'1.23' == 1.23 						//true
0 == false      					//true
[] == false     					//true
[] == 0								//true
null == undefined      				//true
new Object() == new Object()   		//false 地址不一样
[1,2] == [1,2]   					//fasle 地址不一样

等于== 的类型转换

null == undefind
number == string 					//string 转 number
boolean == ?   					    // ?转number 1 == true
object == number | string           // 对象转为基本类型

严格等于 === 用于类型比较

null === null                   	//true
undefind === undefind  				//true
NaN === NaN              			//false
new Object() === new Object() 		//false 地址不一样

总结:
类型相同,用 ===
类型不同,尝试类型转换和比较(转为number或者基本数据类型)。

包装对象

原始类型:string 包装类型:String
原始类型:number 包装类型:Number
原始类型:boolean 包装类型 Boolean

var str = "string";                   //undefined
var strObj = new String("string");	  //undefined
str == strObj 				      	  //true
strObj                                //String?{"string"}
str						              //"string"

基本类型尝试以对象方式使用,
JavaScript会很智能的基本类型转为对应的包装类型对象。
操作完后,零时对象会被销毁掉。

类型检测

检测方法

typeof
instanceof
Object.prototype.toString
constructor
duck type

typeof

用法:函数对象和基本类型判断

特殊:

typeof NaN 				        	   //number
typeof null 				           //object
其它类型                                //object

instanceof

用法:基于原型链,只能判断被包装对象创建过的,比如Date
特殊:
obj instanceof Object
不同window 或者 不同iframe的对象检测不能用instanceof

Object.prototype.toString

Object.prototype.toString.apply([]); === '[Object Array]'
Object.prototype.toString.apply(null); === "[object Null]"
Object.prototype.toString.apply(NaN); ==="[object Number]"
Object.prototype.toSting(undefined)  	
//VM1075:1 Uncaught TypeError: Object.prototype.toSting is not a function at <anonymous>:1:18

注意:不能判断funcation Date
IE 6 7 8 null --> object null最好用 ===

constructor

基于原型链,可能会被改写

总结:
typeof
适合基本类型及Function检测,遇到null失效。
Object.prototype.toString
适合内置对象和基本数据类型,遇到null和undefined失效。
intanceof
适合自定义对象,可以用于检测原生对象,在不同window iframe失效。

使用场景

1 判断空

null === null 
typeof undefined === "undefined" 或者 undefined === undefined
"" === ""

2 判断数组

bject.prototype.toString.apply([]); === '[Object Array]'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值