如何在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?
