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

时间:2010-11-02 15:35:30

标签: javascript jquery

在JavaScript / jQuery中,如果我alert某个对象,我会得到[object][object Object]

有什么方法可以知道:

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

  2. 这是什么类型的对象

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

7 个答案:

答案 0 :(得分:137)

您可以通过调用JavaScript的本机for in循环来查找对象的键和值:

var obj = {
    foo:    'bar',
    base:   'ball'
};

for(var key in obj) {
    alert('key: ' + key + '\n' + 'value: ' + obj[key]);
}

或使用jQuery的.each()方法:

$.each(obj, function(key, element) {
    alert('key: ' + key + '\n' + 'value: ' + element);
});
ECMA- / JavaScript中的

With the exception of six primitive types一切是一个对象。阵列;功能;一切都是对象。即使大多数这些原语实际上也是具有有限选择方法的对象。必要时,它们被铸在引擎盖下的物体中。要知道基类名称,可以在对象上调用Object.prototype.toString方法,如下所示:

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

以上将输出[object Array]

还有其他几个类名,例如[object Object][object Function][object Date][object String][object Number][object Array]和{{ 1}}。

答案 1 :(得分:13)

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

  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");
       }
    

  3. 编辑:

      上面的
    1. <object>将替换为对象的变量引用。
    2. console.log()将在控制台中使用,如果您不确定是什么,可以将其替换为alert()

答案 2 :(得分:7)

  

i)这两个对象之间有什么区别

简单的答案是[object]表示没有内部类的宿主对象。宿主对象是一个对象,它不是您正在使用的ECMAScript实现的一部分,但是由主机作为扩展提供。 DOM是宿主对象的常见示例,但在大多数较新的实现中,DOM对象继承自原始Object并具有内部类名(例如 HTMLElement Window 等) 。 IE的专有ActiveXObject是主机对象的另一个例子。

在Internet Explorer 7及更低版本中警告DOM对象时,最常见的是

[object],因为它们是没有内部类名的主机对象。

  

ii)这是什么类型的对象

您可以使用Object.prototype.toString获取对象的“类型”(内部类)。规范要求它始终以[object [[Class]]]格式返回一个字符串,其中[[Class]]是内部类名,例如 Object Array ,< em> Date , RegExp 等。您可以使用

将此方法应用于任何对象(包括宿主对象)
Object.prototype.toString.apply(obj);

许多isArray实现使用此技术来发现对象是否实际上是一个数组(尽管it's not as robust in IE as it is in other browsers)。


  

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

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

答案 3 :(得分:4)

我希望这不算垃圾邮件。在无休止的调试会话之后,我谦卑地结束了写一个函数: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));

答案 4 :(得分:2)

获取Mozilla Firefox的FireBug

使用console.log(obj);

答案 5 :(得分:1)

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; });

你会喜欢它。

答案 6 :(得分:0)

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

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));