在JavaScript / jQuery中,如果我alert有某个对象,我会得到[object]或  [object Object]
有什么办法知道:
这两个对象有什么区别
这是什么类型的对象
该对象包含哪些所有属性以及每个属性的值
?
在JavaScript / jQuery中,如果我alert有某个对象,我会得到[object]或  [object Object]
有什么办法知道:
这两个对象有什么区别
这是什么类型的对象
该对象包含哪些所有属性以及每个属性的值
?
Answers:
您可以通过调用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中的所有内容都是一个对象。数组;功能; 一切都是对象。实际上,即使这些原语中的大多数也实际上是对象,方法选择有限。必要时,将它们投射到引擎盖下的物体中。要知道基类名称,可以Object.prototype.toString在对象上调用该方法,如下所示:
alert(Object.prototype.toString.call([]));
以上将输出[object Array]。
还有其他一些类的名称,如[object Object],[object Function],[object Date],[object String],[object Number],[object Array],和[object Regex]。
var str = 'primitive'; str.foo = 'bar'; /*wouldn't work*/相反,var oStr = new String('string object');  oStr.foo = 'bar'; /*works*/  如果要抽象化它并将其称为所有对象,则可以将基元视为基元对象,但这并不等同于真正的JavaScript对象的超类。
                    console.log检查物体
                    在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()i)这两个对象有什么区别
简单的答案是[object]表明没有内部类的宿主对象。主机对象是不属于您正在使用的ECMAScript实现的一部分的对象,而是由主机作为扩展提供的。DOM是宿主对象的常见示例,尽管在大多数较新的实现中,DOM对象都从本机Object继承并具有内部类名(例如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)。该数组将包含不可枚举和可枚举的属性名称。
我希望这不会被视为垃圾邮件。在无休止的调试会话后,我虚心地写了一个函数: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);
console.log同样有效,您可以单击日志中的对象以获取“目录” ...
                    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));