JavaScript中如何判断对象在数组中一个对象是不是数组

js判断是否是数组及常见类型判断
9778次浏览
本篇是基础知识普及篇,js判断数据类型等。我们都知道,php中有is_array()函数,但是js中没有,我们判断数据类型是否是数组的时候,通常保险起见,可以写个函数进行判断。今天呢,普及一些基本的数据类型判断方法,希望对大家有所帮助。
typeof用的比较多的时候,是判断某个全局变量在不在,假如某个页面定义了一个全局变量。假如你做如下判断:
//haorooms是全局变量
if(haorooms!=undefined){
}//js会报错,说&Uncaught ReferenceError: haorooms is not defined&
解决的方法是我们如下写:
if(typeof haorooms!=undefined){
用了typeof之后,就不会报错了!这是typeof的应用之一!
此外,typeof还可以进行数据类型的判断!如下:
var haorooms=&string&; console.log(haorooms); //string
var haorooms=1; console.log(haorooms); //number
var haorooms= console.log(haorooms); //boolean
console.log(typeof haorooms); //undfined
var haorooms= console.log(typeof haorooms); //object
var haorooms = console.log(typeof haorooms); //object
var haorooms = []; console.log(haorooms); //object
var haorooms = function(){}; console.log(typeof haorooms) //function
除了可以判断数据类型还可以判断function类型
很明显,对于typeof,除了前四个类型外,null、对象、数组返回的都是object类型;
instanceof 篇
可以用其判断是否是数组。
var haorooms=[];
console.log(haorooms instanceof Array) //返回true
constructor 篇
constructor就是返回对象相对应的构造函数。
判断各种数据类型的方法:
console.log([].constructor == Array);
console.log({}.constructor == Object);
console.log(&string&.constructor == String);
console.log((123).constructor == Number);
console.log(true.constructor == Boolean);
function employee(name,job,born){
this.name=
this.born= }
var haorooms=new employee(&Bill Gates&,&Engineer&,1985);
console.log(haorooms.constructor); //输出function employee(name, jobtitle, born){this.name = this.jobtitle = this.born =}
通过输出haorooms.constructor,可以看出constructor就是返回对象相对应的构造函数。
相关文章:
关键词搜索JavaScript Array(数组)对象
JavaScript Array(数组)对象
数组对象的作用是:使用单独的变量名来存储一系列的值。
创建数组,为其赋值,然后输出这些值。
使用 for...in 声明来循环输出数组中的元素。
如何使用 concat() 方法来合并两个数组。
如何使用 join() 方法将数组的所有元素组成一个字符串。
如何使用 sort() 方法从字面上对数组进行排序。
如何使用 sort() 方法从数值上对数组进行排序。
完整的 Array 对象参考手册
我们提供 ,其中包括所有可用于数组对象的属性和方法。
该手册包含了对每个属性和方法的详细描述以及相关实例。
数组对象用来在单独的变量名中存储一系列的值。
我们使用关键词 new 来创建数组对象。下面的代码定义了一个名为 myArray 的数组对象:
var myArray=new Array()
有两种向数组赋值的方法(你可以添加任意多的值,就像你可以定义你需要的任意多的变量一样)。
var mycars=new Array()
mycars[0]=&Saab&
mycars[1]=&Volvo&
mycars[2]=&BMW&
也可以使用一个整数自变量来控制数组的容量:
var mycars=new Array(3)
mycars[0]=&Saab&
mycars[1]=&Volvo&
mycars[2]=&BMW&
var mycars=new Array(&Saab&,&Volvo&,&BMW&)
注意:如果你需要在数组内指定数值或者逻辑值,那么变量类型应该是数值变量或者布尔变量,而不是字符变量。
通过指定数组名以及索引号码,你可以访问某个特定的元素。
下面是代码行:
document.write(mycars[0])
下面是输出:
修改已有数组中的值
如需修改已有数组中的值,只要向指定下标号添加一个新值即可:
mycars[0]=&Opel&;
现在,以上代码:
document.write(mycars[0]);如何判断javascript中的变量是否为数组?_百度知道
如何判断javascript中的变量是否为数组?
如题,如何判断javascript中的变量是否为数组?在网上找了很多方法,感觉都不是很适合。谁有个比较有效的方式判断变量是否为数组。
我有更好的答案
通过下面方法进行检测,如果是数组,则返回true,如果不是数组,则返回falsefunction&isArray(obj)&{&&&return&Object.prototype.toString.call(obj)&===&'[object&Array]';&&&}测试:var&a1&=&[1,2,3];var&a2=new&Array(&a&,&b&);var&a3={a:1};alert(isArray(a1));//truealert(isArray(a2));//truealert(isArray(a3));//false补充:根据ECMA-262规范定义1、Object.prototype.toString( ) When the toString method is called, the following steps are taken:Get the [[Class]] property of this object.Compute a string value by concatenating the three strings “[object “, Result (1), and “]”.Return Result (2)2、new Array([ item0[, item1 [,…]]])The [[Class]] property of the newly constructed object is set to “Array”.因此检测对象是否是[object Array]就能判断是否是数组,call改变toString的this引用为待检测的对象,返回此对象的字符串表示,然后对比此字符串是否是'[object Array]',以判断其是否是Array的实例。
采纳率:74%
来自团队:
var array = [];alert(Object.prototype.toString.call(array) == '[object Array]')
本回答被提问者采纳
组为引用类型,用 typeof 操作符检测引用类型的作用不大。ECMAScript提供了instanceof 操作符用于检测引用类型。如:&script&var arr = [ ];alert (arr instanceof Array )//如果变量是给定引用类型;script&gt,那么instanceof 操作符返回true,这里返回true&&#47
a instanceof Array
//判断a是数组吗a是数组的话返回true,否则返回false
Array.prototype.isPrototypeOf([1,2,3])
其他1条回答
为您推荐:
其他类似问题
您可能关注的内容
javascript的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)js判断一个变量是对象还是数组
作者:用户
本文讲的是js判断一个变量是对象还是数组,
typeof都返回object
在JavaScript中所有数据类型严格意义上都是对象,但实际使用中我们还是有类型之分,如果要判断一个变量是数组还是对象使用typeof搞不定,因为它全都返回object
typeof都返回object
在JavaScript中所有数据类型严格意义上都是对象,但实际使用中我们还是有类型之分,如果要判断一个变量是数组还是对象使用typeof搞不定,因为它全都返回object
var o = { 'name':'lee' };
var a = ['reg','blue'];
document.write( ' o typeof is ' + typeof o);
document.write( ' &br /&');
document.write( ' a typeof is ' + typeof a);
o typeof is object
a typeof is object
因此,我们只能放弃这种方法,要判断是数组or对象有两种方法
第一,使用typeof加length属性
数组有length属性,object没有,而typeof数组与对象都返回object,所以我们可以这么判断
var o = { 'name':'lee' };
var a = ['reg','blue'];
var getDataType = function(o){
if(typeof o == 'object'){
if( typeof o.length == 'number' ){
return 'Array';
return 'Object';
return 'param is no object type';
alert( getDataType(o) );
alert( getDataType(a) );
alert( getDataType(1) );
// param is no object type
alert( getDataType(true) ); // param is no object type
alert( getDataType('a') );
// param is no object type
第二,使用instanceof
使用instanceof可以判断一个变量是不是数组,如:
var o = { 'name':'lee' };
var a = ['reg','blue'];
alert( a instanceof Array );
alert( o instanceof Array );
也可以判断是不是属于object
var o = { 'name':'lee' };
var a = ['reg','blue'];
alert( a instanceof Object );
alert( o instanceof Object );
但数组也是属于object,所以以上两个都是true,因此我们要利用instanceof判断数据类型是对象还是数组时应该优先判断array,最后判断object
var o = { 'name':'lee' };
var a = ['reg','blue'];
var getDataType = function(o){
if(o instanceof Array){
return 'Array'
}else if( o instanceof Object ){
return 'Object';
return 'param is no object type';
alert( getDataType(o) );
alert( getDataType(a) );
alert( getDataType(1) );
// param is no object type
alert( getDataType(true) ); // param is no object type
alert( getDataType('a') );
// param is no object type
如果你不优先判断Array,比如:
var o = { 'name':'lee' };
var a = ['reg','blue'];
var getDataType = function(o){
if(o instanceof Object){
return 'Object'
}else if( o instanceof Array ){
return 'Array';
return 'param is no object type';
alert( getDataType(o) );
alert( getDataType(a) );
alert( getDataType(1) );
// param is no object type
alert( getDataType(true) ); // param is no object type
alert( getDataType('a') );
// param is no object type
那么数组也会被判断为object。
下面看一国外人写的
参考ECMA-262规范给一个通用的方法:
function isArray(obj) {
return Object.prototype.toString.call(obj) === '[object Array]';
ECMA-262解释:
Object.prototype.toString( ) When the toString method is called, the following steps are taken:
Get the [[Class]] property of this object.
Compute a string value by concatenating the three strings “[object “, Result (1), and “]”.
Return Result (2)
该规范定义了Object.prototype.toString的行为:首先,取得对象的一个内部属性[[Class]],然后依据这个属性,返回一个类似于"[object Array]"的字符串作为结果(看过ECMA标准的应该都知道,[[]]用来表示语言内部用到的、外部不可直接访问的属性,称为“内部属性”)。利用这个方法,再配合call,我们可以取得任何对象的内部属性[[Class]],然后把类型检测转化为字符串比较,以达到我们的目的。
在ECMA标准中Array的描述吧:
ECMA-262 写道
new Array([ item0[, item1 [,…]]])
The [[Class]] property of the newly constructed object is set to “Array”.
js的原型继承有个缺点,就是子类原来的原型对象被替换了,在获取子类的constructor的时候,实际取的是从父类继承的constructor。
如果不想改变constructor,可以采用以下方法实现继承:
Function.prototype.extend = function(parent) {
var cls = new Function();
cls.prototype = parent.
this.prototype =
this.prototype.constructor =
function t(){};
t.extend(Array);
alert(x.constructor);//==t
而instaceof是判断对象的类型,比如:
以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索数组
js 判断数组包含对象、js判断是数组还是对象、js判断对象是否为数组、js判断对象是否是数组、js判断变量是否为数组,以便于您获取更多的相关知识。
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率
40+云计算产品,6个月免费体验
稳定可靠、可弹性伸缩的在线数据库服务,全球最受欢迎的开源数据库之一
IT采购开年惠,百款产品5折起,新购满额再返最高6000!
云栖社区(yq.aliyun.com)为您免费提供相关信息,包括
,所有相关内容均不代表云栖社区的意见!

我要回帖

更多关于 js判断是数组还是对象 的文章

 

随机推荐