如何在JavaScript / jQuery中获取对象的属性?
在JavaScript / jQuery中,如果我alert
某个对象,我会得到[object]
或[object Object]
有什么方法可以知道:
这两个对象有什么区别
这是什么类型的对象
此对象包含的所有属性以及每个属性的值
?
您可以通过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);
});
除了六种基本类型之外,ECMA- / Javascript中的所有内容都是一个对象。 数组,函数,一切都是一个对象。 这些基元中的大多数实际上也是分别具有有限方法选择的对象,当需要时,它们被转化为对象。 要知道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>
将被替换为对该对象的变量引用。 console.log()
将在控制台中使用,如果您不确定它是什么,可以用alert()
替换它。 我)这两个对象有什么区别
简单的答案是[object]
指示没有内部类的主机对象。 主机对象是不属于您正在使用的ECMAScript实现的一部分的对象,但由主机作为扩展提供。 DOM是宿主对象的常见示例,尽管在大多数较新的实现中,DOM对象从本地对象继承并具有内部类名称(如HTMLElement,Window等)。 IE的专有ActiveXObject是主机对象的另一个例子。
[object]
在Internet Explorer 7及更低版本中警告DOM对象时最为常见,因为它们是没有内部类名称的主机对象。
ii)这是什么类型的对象
您可以使用Object.prototype.toString
获取对象的“类型”(内部类)。 该规范要求它总是以[object [[Class]]]
格式返回一个字符串,其中[[Class]]
是诸如Object,Array,Date,RegExp等的内部类名称。您可以将此方法应用于任何对象(包括主对象)使用
Object.prototype.toString.apply(obj);
很多isArray
实现使用这种技术来发现一个对象是否实际上是一个数组(尽管它在IE中不像其他浏览器那样健壮)。
iii)该对象包含的所有属性以及每个属性的值
在ECMAScript 3中,您可以使用for...in
循环遍历可枚举的属性。 请注意,大多数内置属性都是不可枚举的。 某些主机对象也是如此。 在ECMAScript 5中,可以使用Object.getOwnPropertyNames(obj)
获取包含所有非继承属性名称的数组。 该数组将包含不可枚举和可枚举的属性名称。
上一篇: How to get an object's properties in JavaScript / jQuery?