当前位置:  开发笔记 > 编程语言 > 正文

如何显示JavaScript对象?

如何解决《如何显示JavaScript对象?》经验,为你挑选了24个好方法。

如何以字符串格式显示JavaScript对象的内容,就像我们alert变量一样?

我希望显示对象的格式相同的方式.



1> Sandeep..:

使用本机JSON.stringify方法.适用于嵌套对象,所有主流浏览器都支持此方法.

str = JSON.stringify(obj);
str = JSON.stringify(obj, null, 4); // (Optional) beautiful indented output.
console.log(str); // Logs output to dev tools console.
alert(str); // Displays output using window.alert()

链接到Mozilla API参考和其他示例.

obj = JSON.parse(str); // Reverses above operation (Just in case if needed.)

如果遇到此Javascript错误,请使用自定义JSON.stringify替换程序

"Uncaught TypeError: Converting circular structure to JSON"


要获得更易读的输出,请尝试JSON.stringify(obj,null,4).这将把它写成整齐的缩进文本
如果你是像我这样的新手,不要忘记```console.log```,即```console.log(JSON.stringify(obj,null,4));```
JSON.stringify只能显示一小部分javascript值,并会为其余部分抛出异常 - console.log没有此问题.
当ob = window时,"Uncaught TypeError:将循环结构转换为JSON".

2> Triptych..:

使用Firefox

如果您想打印对象以进行调试,我建议您安装Firebug for Firefox并使用以下代码:

var obj = {prop1: 'prop1Value', prop2: 'prop2Value', child: {childProp1: 'childProp1Value'}}
console.log(obj)

使用Chrome

console.log('My object : ' + obj)

会显示

截图控制台chrome

注意:只能记录该对象.例如,这不起作用:

console.log('My object: ', obj);


这不起作用打印[object Object]
`console.log("id:"+ obj);`输出正如你在那里看到的字符串那样输出不正确,你需要像这样指定它:`console.log("id:"); 的console.log(OBJ);`
是的,它打印[object Object],但它旁边有一个expando-toggly按钮,可以让你检查对象的内容.
使用JavaScript控制台时,该功能也适用于Google Chrome(Shift + Control + J或Shift + Control + I,具体取决于Chrome版本).另请注意,`console.log(obj1,obj2)`也非常好用,因此在记录多个变量时,不必为每个对象调用`console.log()`.此外,请始终记住在生产中删除所有此类调用,因为它会破坏不实现它的浏览器(例如Internet Explorer).
@hughes它实际上可以做到这两点.我有一个我创建的对象:var obj = {"foo":false}; 和另一个从服务器传递回调的对象,通过回调传递的对象用小箭头打印,这样你就可以打开它,静态创建的对象只打印没有箭头的[object Object].我也想弄清楚这个,还有其他的想法吗?
尝试`console.log(JSON.stringify(obj))`或`console.dir(obj)`
@Felix:关于打破IE等浏览器的好点.你也可以使用`if(console && console.log){console.log(obj1,obj2); 不必担心破坏不支持console.log的浏览器.
如果你没有扩展按钮,也许你曾试图像我一样聪明,并在希望启蒙的对象上调用`toString()`.然而,这种强制[object Object]输出.记住这一点,以节省您的一生时间:)
**重要**console.log实际上打印了对象的引用,因此如果对象字段在日志记录后发生更改,那么输出请参见[this](http://stackoverflow.com/questions/7389069/console-log-object -at电流状态)
`console.log('%c red text,%c green bg','color:red','background:green');``%c`可以用来为console.log设置颜色样式.如果你有太多需要找到一个简单的模块和经常控制台日志的模块,这会很有帮助
这不是正确的答案,console.dir(value)是,即使在大多数情况下,console.log(value)也会产生相同的结果(如果值是一个对象)
错误。就像其他人所说的那样,console.log实际上在最后一个可执行状态下打印对对象的引用。它将改变!搜索不存在的错误时,这可能会浪费您很多时间。最好使用JSON.stringify。

3> Flavius Stef..:
var output = '';
for (var property in object) {
  output += property + ': ' + object[property]+'; ';
}
alert(output);


+1,并非所有的javascript都在浏览器中运行或者可以在其中调试.
Omg - 0:[; 1:o; 2:b; 3:j; 4:e; 5:c; 6:t; 7:; 8:O; 9:b; 10:j; 11:e; 12:c; 13:t; 14:];
您可能希望在大多数情况下使用hasOwnProperty屏蔽内置的cruft.
我正在寻找一个php风格的`foreach()`谢谢!

4> Pizzaiola Go..:

console.dir(object):

显示指定JavaScript对象的属性的交互式列表.此列表允许您使用显示三角形来检查子对象的内容.

请注意,该console.dir()功能是非标准的.请参阅MDN Web Docs



5> Abhishek Goe..:

试试这个 :

console.log(JSON.stringify(obj))

这将打印对象的stringify版本.因此,[object]您将获得对象的内容而不是输出.


`typeerror:将循环结构转换为JSON`?

6> alamar..:

好吧,Firefox(感谢@Bojangles获取详细信息)有一个Object.toSource()方法可以将对象打印为JSON和function(){}.

我想这对于大多数调试来说已经足够了.


旧线程,刚刚通过Google找到它.`.toSource()`实际上是Firefox _only_.我想我会告诉你的.
Object.toSource()似乎不适用于Chrome,这是预期的吗?或者Chrome不属于"高级浏览器"?=)

7> 小智..:

如果要使用alert,要打印对象,可以执行以下操作:

alert("myObject is " + myObject.toSource());

它应该以字符串格式打印每个属性及其对应的值.


toSource()在非gecko浏览器中不起作用(例如Chrome,Safari)

8> Vlad Bezden..:

如果您希望以表格格式查看数据,则可以使用

console.table(obj);

如果单击表列,则可以对表进行排序.

您还可以选择要显示的列:

console.table(obj, ['firstName', 'lastName']);

您可以在此处找到有关console.table的更多信息



9> Lander..:

在NodeJS中,您可以使用打印对象util.inspect(obj).请务必说明深度,否则您只能打印浅物体.



10> wilsonpage..:

功能:

var print = function(o){
    var str='';

    for(var p in o){
        if(typeof o[p] == 'string'){
            str+= p + ': ' + o[p]+'; 
'; }else{ str+= p + ': {
' + print(o[p]) + '}'; } } return str; }

用法:

var myObject = {
    name: 'Wilson Page',
    contact: {
        email: 'wilson@hotmail.com',
        tel: '123456789'
    }  
}

$('body').append( print(myObject) );

例:

http://jsfiddle.net/WilsonPage/6eqMn/



11> 小智..:

正如之前所说的最好,最简单的方式我找到了

var getPrintObject=function(object)
{
    return JSON.stringify(object);
}



12> jpoppe..:

使用带有颜色作为奖励的Node.js打印完整对象:

console.dir(object, {depth: null, colors: true})

颜色当然是可选的,'depth:null'将打印完整的对象.

浏览器似乎不支持这些选项.

参考文献:

https://developer.mozilla.org/en-US/docs/Web/API/Console/dir

https://nodejs.org/api/console.html#console_console_dir_obj_options



13> Walter Caraz..:

用这个:

console.log('print object: ' + JSON.stringify(session));



14> sreepurna..:

如果你想打印它的全长物体,可以使用

console.log(require('util').inspect(obj,{showHidden:false,depth:null})

如果要通过将对象转换为字符串来打印对象

的console.log(JSON.stringify(OBJ));



15> Raza Rafaide..:

只需使用

JSON.stringify(obj)

var args_string = JSON.stringify(obj);
console.log(args_string);

要么

alert(args_string);

另请注意,javascript函数被视为对象。

实际上,您可以像这样分配新属性

foo.moo = "stackoverflow";
console.log(foo.moo);



16> Pimp Trizkit..:

(这已添加到我的GitHub库中)

在这里重新发明轮子!这些解决方案都不适用于我的情况.所以,我很快就抄写了pagewil的答案.这个不是用于打印到屏幕(通过控制台,或文本字段或其他).然而,它是用于数据传输的.这个版本似乎返回了一个非常相似的结果toSource().我没试过JSON.stringify,但我认为这是一回事.此函数的结果是一个有效的Javascript对象声明.

我不会怀疑这样的事情是否已经出现在某个地方,但它只是缩短了时间,而不是花一些时间来搜索过去的答案.而且当我开始搜索这个问题时,这个问题是谷歌的热门话题.我想把它放在这里可能会帮助别人.

无论如何,此函数的结果将是对象的字符串表示形式,即使您的对象具有嵌入的对象和数组,即使这些对象或数组具有更多的嵌入对象和数组.(我听说你喜欢喝酒?所以,我用冷却器给你的车拉了个屁.然后,我用冷却器给你的冷却器拉了个屁.所以,你的冷却器可以喝,而你很酷.)

存储的数组[]代替,{}因此没有键/值对,只有值.像常规数组一样.因此,它们像数组一样被创建.

此外,引用了所有字符串(包括键名),除非这些字符串具有特殊字符(如空格或斜杠),否则不需要这样做.但是,我不想检测这只是为了删除一些原本仍能正常工作的报价.

然后,可以将此结果字符串与其一起使用eval或仅将其转储到var thru字符串操作中.因此,从文本中重新创建对象.

function ObjToSource(o){
    if (!o) return 'null';
    var k="",na=typeof(o.length)=="undefined"?1:0,str="";
    for(var p in o){
        if (na) k = "'"+p+ "':";
        if (typeof o[p] == "string") str += k + "'" + o[p]+"',";
        else if (typeof o[p] == "object") str += k + ObjToSource(o[p])+",";
        else str += k + o[p] + ",";
    }
    if (na) return "{"+str.slice(0,-1)+"}";
    else return "["+str.slice(0,-1)+"]";
}

让我知道如果我搞砸了,我的测试工作正常.此外,我能想到检测类型的唯一方法array是检查是否存在length.因为Javascript确实将数组存储为对象,所以我实际上无法检查类型array(没有这样的类型!).如果其他人知道更好的方式,我很乐意听到它.因为,如果您的对象也有一个名为的属性,length那么此函数将错误地将其视为一个数组.

编辑:添加了对空值对象的检查.谢谢Brock Adams

编辑:下面是固定功能,可以打印无限递归对象.这toSource与FF的打印方式不同,因为toSource会打印无限递归一次,此时此函数会立即将其终止.这个函数比上面的那个运行得慢,所以我在这里添加它而不是编辑上面的函数,因为如果你计划传递链接回自己的对象,它只需要它.

const ObjToSource=(o)=> {
    if (!o) return null;
    let str="",na=0,k,p;
    if (typeof(o) == "object") {
        if (!ObjToSource.check) ObjToSource.check = new Array();
        for (k=ObjToSource.check.length;na

测试:

var test1 = new Object();
test1.foo = 1;
test1.bar = 2;

var testobject = new Object();
testobject.run = 1;
testobject.fast = null;
testobject.loop = testobject;
testobject.dup = test1;

console.log(ObjToSource(testobject));
console.log(testobject.toSource());

结果:

{'run':1,'fast':null,'loop':{},'dup':{'foo':1,'bar':2}}
({run:1, fast:null, loop:{run:1, fast:null, loop:{}, dup:{foo:1, bar:2}}, dup:{foo:1, bar:2}})

注意:尝试打印document.body是一个可怕的例子.首先,FF在使用时只打印一个空对象字符串toSource.当使用上面的功能时,FF崩溃了SecurityError: The operation is insecure..Chrome会崩溃Uncaught RangeError: Maximum call stack size exceeded.显然,document.body并不意味着转换为字符串.因为它要么太大,要么违反安全策略来访问某些属性.除非,我搞砸了一些事情,告诉我!



17> Max Alexande..:

注意:在这些示例中,yourObj定义了要检查的对象。

首先,我最不喜欢但使用最多的显示对象的方式:

这是显示对象内容的实际方法

console.log(yourObj)

会产生类似:

我认为最好的解决方案是先查看“对象键”,然后查看“对象值”(如果您真的想查看对象的内容)...
console.log(Object.keys(yourObj));
console.log(Object.values(yourObj));

它将输出类似: (如上图:对象中存储的键/值)

如果您使用的是ECMAScript 2016或更高版本,则还有一个新选项:
Object.keys(yourObj).forEach(e => console.log(`key=${e}  value=${yourObj[e]}`));

这将产生整洁的输出: 先前答案中提到的解决方案:console.log(yourObj)显示太多参数,不是显示所需数据的最人性化方法。这就是为什么我建议分别记录键和值的原因。

接下来:
console.table(yourObj)

有人在较早的评论中建议过这个,但是它对我没有用。如果它确实适用于其他浏览器或其他工具上的其他人,则表示荣誉!病态的代码仍然放在这里供参考!将这样输出到控制台:



18> megaboss98..:

我需要一种递归打印对象的方法,提供了pagewil的答案(谢谢!).我更新了一点,以包括一种打印到某个级别的方法,并添加间距,以便根据我们当前的级别正确缩进,以便它更具可读性.

// Recursive print of object
var print = function( o, maxLevel, level ) {
    if ( typeof level == "undefined" ) {
        level = 0;
    }
    if ( typeof level == "undefined" ) {
        maxLevel = 0;
    }

    var str = '';
    // Remove this if you don't want the pre tag, but make sure to remove
    // the close pre tag on the bottom as well
    if ( level == 0 ) {
        str = '
';
    }

    var levelStr = '';
    for ( var x = 0; x < level; x++ ) {
        levelStr += '    ';
    }

    if ( maxLevel != 0 && level >= maxLevel ) {
        str += levelStr + '...
'; return str; } for ( var p in o ) { if ( typeof o[p] == 'string' ) { str += levelStr + p + ': ' + o[p] + '
'; } else { str += levelStr + p + ': {
' + print( o[p], maxLevel, level + 1 ) + levelStr + '}
'; } } // Remove this if you don't want the pre tag, but make sure to remove // the open pre tag on the top as well if ( level == 0 ) { str += '
'; } return str; };

用法:

var pagewilsObject = {
    name: 'Wilson Page',
    contact: {
        email: 'wilson@hotmail.com',
        tel: '123456789'
    }  
}

// Recursive of whole object
$('body').append( print(pagewilsObject) ); 

// Recursive of myObject up to 1 level, will only show name 
// and that there is a contact object
$('body').append( print(pagewilsObject, 1) ); 



19> 小智..:

这是一种方法:

console.log("%o", obj);


所以被低估的答案,这正是我想要的。

20> 3DRobert..:

最简单的方法:

console.log(obj);

或者留言:

console.log("object is: %O", obj);

传递的第一个对象可以包含一个或多个格式说明符.格式说明符由百分号(%)后跟一个表示要应用的格式的字母组成.

更多格式说明符



21> nils peterso..:

我总是用console.log("object will be: ", obj, obj1).这样我就不需要使用带有JSON的stringify来解决这个问题.对象的所有属性都将很好地扩展.



22> 小智..:

在控制台中显示对象的另一种方法是使用JSON.stringify.查看以下示例:

var gandalf = {
  "real name": "Gandalf",
  "age (est)": 11000,
  "race": "Maia",
  "haveRetirementPlan": true,
  "aliases": [
    "Greyhame",
    "Stormcrow",
    "Mithrandir",
    "Gandalf the Grey",
    "Gandalf the White"
  ]
};
//to console log object, we cannot use console.log("Object gandalf: " + gandalf);
console.log("Object gandalf: ");
//this will show object gandalf ONLY in Google Chrome NOT in IE
console.log(gandalf);
//this will show object gandalf IN ALL BROWSERS!
console.log(JSON.stringify(gandalf));
//this will show object gandalf IN ALL BROWSERS! with beautiful indent
console.log(JSON.stringify(gandalf, null, 4));



23> user3632930..:
var list = function(object) {
   for(var key in object) {
     console.log(key);
   }
}

object你的对象在哪里

或者你可以在chrome dev工具,"console"选项卡中使用它:

console.log(object);



24> loxsat..:

假设对象 obj = {0:'John', 1:'Foo', 2:'Bar'}

打印对象的内容

for (var i in obj){
    console.log(obj[i], i);
}

控制台输出(Chrome DevTools):

John 0
Foo 1
Bar 2

希望有所帮助!

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有