js如何判断一个对象是array ,instanceof 是基于什么实现的呢?
2016-06-08 14:42
816 查看
typeof 操作符
对于Function, String, Number ,Undefined 等几种类型的对象来说,他完全可以胜任,但是为Array时var arr = [1,2,3,4,5]; console.log(typeof arr)
你会得到一个object 的答案。
instanceof 操作符
Js中instanceof运算符会返回一个 Boolean 值,指出对象是否是特定类的一个实例。 如下var arr=["1","2","3","4","5"]; console.log(arr instanceof Array);
你会得到一个true.这样你就可以得到你想要的结果了,
之前有个同事面试的时候问了这个问题,但是面试官继续问了一个她一个问题,instanceof 这个操作符的原理是什么,我想这样这里有必要说一下。
instanceof 检测一个对象A是不是另一个对象B的实例的原理是:查看对象B的prototype指向的对象是否在对象A的[[prototype]]链上。如果在,则返回true,如果不在则返回false。不过有一个特殊的情况,当对象B的prototype为null将会报错(类似于空指针异常)。
看下面一段代码
function Cat(){} Cat.prototype = {} function Dog(){} Dog.prototype ={} var dog1 = new Dog(); alert(dog1 instanceof Dog);//true alert(dog1 instanceof Object);//true Dog.prototype = Cat.prototype; alert(dog1 instanceof Dog);//false alert(dog1 instanceof Cat);//false alert(dog1 instanceof Object);//true; var dog2= new Dog(); alert(dog2 instanceof Dog);//true alert(dog2 instanceof Cat);//true alert(dog2 instanceof Object);//true Dog.prototype = null; var dog3 = new Dog(); alert(dog3 instanceof Cat);//false alert(dog3 instanceof Object);//true alert(dog3 instanceof Dog);//error
相关文章推荐
- JS利用正则配合replace替换指定字符
- js日期 操作
- JavaScript 高级课程之缓冲收缩(多个DIV),谈入谈出
- JavaScript 高级课程之缓冲收缩(多个DIV),Math.ceil()向上取整,Math.floor()向下取整
- JavaScript 高级课程之缓冲收缩DIV,Math.ceil()向上取整,Math.floor()向下取整
- JavaScript 滚动条示例,控制居中document.documentElement.scrollTop,document.body.scrollTop,oDiv.offsetHeight
- JavaScript 三种创建对象的方法
- JavaScript 高级课程之淡出淡入CSS filter等属性
- OC之JSON数据解析
- JavaScript 高级课程之分享setInterval(),clearInterval(),onmouseover,onmouseout应用(2_自动判断正负)
- JavaScript 高级课程之分享setInterval(),clearInterval(),onmouseover,onmouseout应用
- JavaScript 高级课程之定时器setInterval,clearInterval
- JavaScript onmousewheel鼠标滚轮示例
- JavaScript Cookie的使用实例
- javascript 使用btoa和atob来进行Base64转码和解码
- JavaScript Cookie的使用
- JavaScript onmousedown选择元素,onmousemove拖动元素,onmouseup松开鼠标,磁性吸附效果示例
- 使用Jsoup解析html网页
- javascript 执行环境,变量对象,作用域链
- JavaScript oncontextmenu鼠标右键菜单触发 自定义右键菜单示例