如何在JavaScript / jQuery中获取对象的属性?

在JavaScript / jQuery中,如果我alert一些对象,我得到[object][object Object]

有什么方法可以知道:

  1. 这两个对象有什么区别?

  2. 这是什么types的对象

  3. 该对象包含的所有属性以及每个属性的值

您可以通过for in循环中调用JavaScript本地代码来查找对象键+值:

 var obj = { foo: 'bar', base: 'ball' }; for(var key in obj) { alert('key: ' + key + '\n' + 'value: ' + obj[key]); } 

或者使用jQuerys .each()方法:

 $.each(obj, function(key, element) { alert('key: ' + key + '\n' + 'value: ' + element); }); 

除了六种基本types ,ECMA- / Javascript中的所有内容都是一个对象。 数组,函数,一切都是一个对象。 这些基元中的大部分实际上也是分别具有有限的方法select的对象,当需要时,它们被转化为对象。 要知道base classname你可以调用对象的Object.prototype.toString方法

 alert(Object.prototype.toString.call([])); 

会输出[object Array]

还有其他几个类名,比如[object Object][object Function][object Date][object String][object Number][object Array][object Regex]

要获取对象属性/值的列表:

  1. 在Firefox – Firebug:

     console.dir(<object>); 
  2. 标准的JS来获得从Slashnick借来的对象密钥:

      var fGetKeys = function(obj){ var keys = []; for(var key in obj){ keys.push(key); } return keys; } // Example to call it: var arrKeys = fGetKeys(document); for (var i=0, n=arrKeys.length; i<n; i++){ console.log(i+1 + " - " + arrKeys[i] + document[arrKeys[i]] + "\n"); } 

编辑:

  1. <object>被replace为对象的variables引用。
  2. console.log()将在控制台中使用,如果你不确定是什么,你可以用alert()来replace它。

我)这两个对象有什么区别

简单的答案是[object]表示一个没有内部类的宿主对象。 主机对象是不属于您正在使用的ECMAScript实现的一部分的对象,但由主机作为扩展提供。 DOM是宿主对象的常见例子,尽pipe在大多数较新的实现中,DOM对象从本地对象inheritance,并且具有内部类名(例如HTMLElementWindow等)。 IE专有的ActiveXObject是主机对象的另一个例子。

当在Internet Explorer 7及更低版本中警告DOM对象时,最常见的是[object] ,因为它们是没有内部类名称的主机对象。

ii)这是什么types的对象

您可以使用Object.prototype.toString获取对象的“types”(内部类)。 该规范要求它总是以[object [[Class]]]格式返回一个string,其中[[Class]]是诸如ObjectArrayDateRegExp等的内部类名称。您可以将此方法应用于任何对象(包括主机对象),使用

 Object.prototype.toString.apply(obj); 

许多isArray实现使用这种技术来发现一个对象是否实际上是一个数组(虽然它不像在其他浏览器中那样健壮 )。

iii)该对象包含的所有属性以及每个属性的值

在ECMAScript 3中,您可以使用for...in循环遍历可枚举的属性。 请注意,大多数内置属性是不可枚举的。 某些主机对象也是如此。 在ECMAScript 5中,可以使用Object.getOwnPropertyNames(obj)获取包含所有非inheritance属性名称的数组。 该数组将包含不可枚举和可枚举的属性名称。

我希望这不算垃圾邮件。 我虚心地结束了无尽的debugging会话后编写一个函数: http : //github.com/halilim/Javascript-Simple-Object-Inspect

 function simpleObjInspect(oObj, key, tabLvl) { key = key || ""; tabLvl = tabLvl || 1; var tabs = ""; for(var i = 1; i < tabLvl; i++){ tabs += "\t"; } var keyTypeStr = " (" + typeof key + ")"; if (tabLvl == 1) { keyTypeStr = "(self)"; } var s = tabs + key + keyTypeStr + " : "; if (typeof oObj == "object" && oObj !== null) { s += typeof oObj + "\n"; for (var k in oObj) { if (oObj.hasOwnProperty(k)) { s += simpleObjInspect(oObj[k], k, tabLvl + 1); } } } else { s += "" + oObj + " (" + typeof oObj + ") \n"; } return s; } 

用法

 alert(simpleObjInspect(anyObject)); 

要么

 console.log(simpleObjInspect(anyObject)); 

获取Mozilla Firefox的FireBug 。

使用console.log(obj);

Spotlight.js是一个很好的库,用于遍历窗口对象和其他寻找特定事物的主机对象。

 // find all "length" properties spotlight.byName('length'); // or find all "map" properties on jQuery spotlight.byName('map', { 'object': jQuery, 'path': '$' }); // or all properties with `RegExp` values spotlight.byKind('RegExp'); // or all properties containing "oo" in their name spotlight.custom(function(value, key) { return key.indexOf('oo') > -1; }); 

你会喜欢这个。

扫描确定的道具的第一个实例的对象:

 var obj = {a:'Saludos', b:{b_1:{b_1_1:'Como estas?',b_1_2:'Un gusto conocerte'}}, d:'Hasta luego' } function scan (element,list){ var res; if (typeof(list) != 'undefined'){ if (typeof(list) == 'object'){ for(key in list){ if (typeof(res) == 'undefined'){ res = (key == element)?list[key]:scan(element,list[key]); } }); } } return res; } console.log(scan('a',obj));