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

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

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

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

str是一个基本类型,他没有属性和方法,获得str的长度str.length 能够获得值,这是为何。app

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

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

数字 number ,boolean都相似。prototype

2、类型检测

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"  历史缘由记住就好继承

二、判断对象类型

1)instanceof :基于原型链判断

obj instanceof Object  : 左操做数必须为对象,若是为基本类型直接返回false,。右操做数,必须为函数对象,函数构造器,不然会抛出异常。ip

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是能够改写的因此使用时当心。

三、类型检测总结

typeof

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

Object.Prototype.toString

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

instanceof

适合自定义对象,也能够用来检测原生对象,在不一样 iframe 和 windows间检测时失效

相关文章
相关标签/搜索