如何在JavaScript / jQuery中获取对象的属性?
在JavaScript / jQuery中,如果我alert
一些对象,我得到[object]
或[object Object]
有什么方法可以知道:
-
这两个对象有什么区别?
-
这是什么types的对象
-
该对象包含的所有属性以及每个属性的值
?
您可以通过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]
要获取对象属性/值的列表:
-
在Firefox – Firebug:
console.dir(<object>);
-
标准的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"); }
编辑:
-
<object>
被replace为对象的variables引用。 -
console.log()
将在控制台中使用,如果你不确定是什么,你可以用alert()
来replace它。
我)这两个对象有什么区别
简单的答案是[object]
表示一个没有内部类的宿主对象。 主机对象是不属于您正在使用的ECMAScript实现的一部分的对象,但由主机作为扩展提供。 DOM是宿主对象的常见例子,尽pipe在大多数较新的实现中,DOM对象从本地对象inheritance,并且具有内部类名(例如HTMLElement , Window等)。 IE专有的ActiveXObject是主机对象的另一个例子。
当在Internet Explorer 7及更低版本中警告DOM对象时,最常见的是[object]
,因为它们是没有内部类名称的主机对象。
ii)这是什么types的对象
您可以使用Object.prototype.toString
获取对象的“types”(内部类)。 该规范要求它总是以[object [[Class]]]
格式返回一个string,其中[[Class]]
是诸如Object , Array , Date , RegExp等的内部类名称。您可以将此方法应用于任何对象(包括主机对象),使用
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));