码迷,mamicode.com
首页 > 编程语言 > 详细

js数组类型判断与数据类型判断回顾

时间:2014-11-07 14:21:16      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   color   ar   os   使用   sp   数据   

前两天参加了百度前端的电话面试,其中问到了数组类型的判断问题,虽然以前看过这方面的内容,但时间久了有点模糊,答得不怎么好,现在对相关内容做个回顾和总结。

先来回答这个问题:如何判断一个对象是数组?

判断一个对象是否是数组方法有多种:

一、Array.isArray()函数

在ECMAScript5中可以通过Array.isArray()来做这件事:

Array.isArray({});    //false
Array.isArray([]);    //true

 二、instanceof

instanceof操作符用于判断一个变量是否为一个对象的实例,只能用于简单的情形:

[] instanceof Array    //true
{} instanceof Array    //false

instanceof的问题:在web浏览器中,可能存在多个窗口或多个窗体,每个窗口都有自己js环境和自己的全局对象,每个对象都有自己的一组构造函数,因此一个窗体的对象不可能是另外窗体中的构造函数的实例,窗体中的混淆不常发生。

三、prototype与call

Object.prototype.toString.call([])==="[object Array]"    //true
Object.prototype.toString.call({})==="[object Array]"    //false

四、constructor

constructor返回对象的构造函数

[].constructor==Array    //true
{}.constructor==Array    //false

注意:使用instanceof和construtor来判断数组 ,被判断的数组必须是在当前页面声明的。比如,在一个子页面中声明了一个数组,并将其值赋给父页面的一个变量,这时判断这个变量:变量.constructor==Array;此时返回false。

原因:数组属于引用数据,在传递过程中仅仅传递引用地址;每个页面Array原生对象的所引用的地址是不一样的,也就是说父页面的Array并不等于子页面的Array。

其他类型的判断方法和数组类似,下面是关于instanceof和constructor返回值的一个列表:

变量 变量.constructor typeof 变量
[]   Array object
{} Object object
var f=function(){} Fuction function
"a string" String string
88 Number number
True Boolean boolean
var a / undefined
null / object
new User() User object

js数组类型判断与数据类型判断回顾

标签:style   blog   io   color   ar   os   使用   sp   数据   

原文地址:http://www.cnblogs.com/aaron-shu/p/4080084.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!