2017/5 JavaScript基础3---包装对象、类型检测

本文解析了JavaScript中基本类型与包装类型的转换机制,并详细介绍了多种类型检测方法:typeof、instanceof、Object.prototype.toString及constructor的应用场景与限制。

一、number string boolean 都有对应的包装类型

可以看到 str是一个基本类型,字符串类型,strObj是一个 对象类型,是String类型对应的包装类

在最后一行打 clear();清除

str是一个基本类型,他没有属性和方法,得到str的长度str.length 可以得到值,这是为什么。

给 str 添加一个属性 t也是可以的  str.t = 10;但赋值之后再看t 为undefined

JavaScript中有一个隐藏机制,当把一个基本类型,尝试为一个对象来使用时,比如在求长度,或添加属性时,会吧基本类型转化为对应的包装类型对象,相当于new String()一个同样的值,当完成访问或设置后,这个临时对象,会被销毁。

数字 number ,boolean都类似。

二、类型检测

1.类型检测分类

  • typeof
  • instanceof
  • Object.prototype.toString
  • constructor
  • duck type

1)typeof

typeof运算符会返回一个字符串,适合函数对象和基本类型的判断

  • typeof 100                "number"
  • typeod true              "boolean"
  • typeof function         "function"
  • typeof (undefined)    "undefined"
  • typeof new Object()  "object"
  • typeof [ 1,2 ]             "object"              //数组也是对象
  • typeof NaN               "number           //NAN not  number ,是number类型的一个特殊值
  • typeof null                "object"

为什么 typeof null ==="object"  历史原因记住就好

2、判断对象类型

1)instanceof :基于原型链判断

obj instanceof Object  : 左操作数必须为对象,如果为基本类型直接返回false,。右操作数,必须为函数对象,函数构造器,否则会抛出异常。

2)判断原理

判断左操作数的 原型链 上 ,是否有 右边构造函数的 prototype 属性。

[1,2] instanceof Array === true

new Object() instanceof Array ===false

注意 不同的 window 或 iframe 间的对象检测是不可以使用instanceof的。

3)Object.Prototype.toString

  • Object.prototype.toString.apply ( [ ] ) === "[ object Array ]"  传入一个数组,会返回一个[ object Array ]
  • .apply(function(){}):传入一个对象 ,返回  "[ object Function]"
  • 传入 null  返回 [  object null ]
  • 穿入 undefined 返回 object undefined

4) constructor

任何一个对象都有一个 constructor属性,继承自原型,constructor 会指向构造这个对象的构造器、构造函数。constructor是可以改写的所以使用时小心。

3、类型检测总结

typeof

适合基本类型及Function检测,遇到null失效返回 object,用 === 方式判断

Object.Prototype.toString

适合内置对象和基元类型,数组函数、在 IE 678  null undefined返回 [ object object ]。

instanceof

适合自定义对象,也可以用来检测原生对象,在不同 iframe 和 windows间检测时失效

 

转载于:https://my.oschina.net/u/2991733/blog/899030

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值