instanceof 在跨 frame 对象构建的场景下会失效
如何判断一个js对象是否是Array,arr为要判断的对象,下面最准确的方法是?
A
typeof(arr)
B
arr instanceof Array
C
arr.toString==='[object Array]';
D
Object.prototype.toString.call(arr) === '[object Array]';
正确答案:D
解析看这里:http://www.nowamagic.net/librarys/veda/detail/1250
简单概括下:
其实Array本身有isArray这个方法判断
判断一个对象是否属于数组,最好怎么做?
- typeof(arr),
typeof返回的是基本数据类型及object,不会详细到array的,所以不行
- arr instanceof Array,
这一点还不透彻,说的是在多iframe/window环境下,通过Instanceof来识别对象是否属于数组会出错
- arr.toString,
直接使用toString函数自然是数组有什么就返回什么了,例如[1,2] => '1,2'
Object.prototype.toString.call(arr) === '[object Array]';这才是正确的
instanceof 操作符的问题在于,它假定只有一个全局执行环境。如果网页中包含多个【frame】框架,那实际上就存在两个以上不同的全局执行环境,从而存在两个以上不同版本的 Array 构造函数。
toString为Object的原型方法,而Array ,Function等类型作为Object的实例,都重写了toString方法。
不同的对象类型调用toString方法时,根据原型链的知识,调用的是对应的重写之后的toString方法(Function类型返回内容为函数体的字符串,Array类型返回元素组成的字符串.....),
而不会去调用Object上原型toString方法(返回对象的具体类型),所以采用obj.toString()不能得到其对象类型,只能将obj转换为字符串类型;
因此,在想要得到对象的具体类型时,应该调用Object上原型toString方法。
__EOF__

本文链接:https://www.cnblogs.com/longmo666/p/17835012.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)