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

与显示对象的格式相同。


当前回答

你可以使用我的功能。使用数组或字符串或对象调用此函数,以提醒内容。

作用

function print_r(printthis, returnoutput) {
    var output = '';

    if($.isArray(printthis) || typeof(printthis) == 'object') {
        for(var i in printthis) {
            output += i + ' : ' + print_r(printthis[i], true) + '\n';
        }
    }else {
        output += printthis;
    }
    if(returnoutput && returnoutput == true) {
        return output;
    }else {
        alert(output);
    }
}

用法

var data = [1, 2, 3, 4];
print_r(data);

其他回答

如果要打印用于调试的对象,请使用以下代码:

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

将显示:

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

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

注意:您也可以在log方法中使用逗号,然后输出的第一行将是字符串,之后将呈现对象:

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

使用此项:

console.log('print object: ' + JSON.stringify(session));
var output = '';
for (var property in object) {
  output += property + ': ' + object[property]+'; ';
}
alert(output);

您还可以使用ES6模板文本概念以字符串格式显示JavaScript对象的内容。

alert(`${JSON.stringify(obj)}`);

常量对象={“name”:“John Doe”,“habbits”:“没有”,};警报(`${JSON.stringify(obj)}`);

循环引用解决方案

要从包含重复引用(在许多地方对同一对象的引用)(包括循环引用)的对象中生成不包含冗余信息的字符串,请使用JSON.stringify和replacer(在代码段中显示),如下所示

let s = JSON.stringify(obj, refReplacer(), 4);

函数refReplacer(){设m=new Map(),v=new Map),init=null;返回函数(字段,值){让p=m.get(this)+(Array.isArray(this)`[${field}]“:”.“+字段);让isComplex=value==对象(值)如果(isComplex)m.set(值,p);让pp=v.get(value)||'';let path=p.replace(/未定义\.\?/,“”);让val=pp`#REF:${pp[0]==“[”?“$”:“$.”}${pp}“:value;!初始化?(init=value):(val===init?val=“#REF:$”:0);if(!pp&&isComplex)v.set(value,path);返回值;}}// ---------------//测试// ---------------//具有重复引用的gen obj设a={a1:1,a2:2};设b={b1:3,b2:“4”};让obj={o1:{o2:a},b,a};//重复引用a.a3=[1,2,b];//循环引用b.b3=a;//循环引用让s=JSON.stringify(obj,refReplacer(),4);console.log;警报;

基于此(更多信息)的此解决方案为每个对象值创建类似JSONPath的路径,如果同一对象出现两次(或更多),则使用此路径的引用来引用该对象,例如#REF:$.bar.arr[3].foo(其中$表示主对象),而不是“渲染”整个对象(冗余度较低)

奖金:倒置

函数parseRefJSON(json){let objToPath=新映射();let pathToObj=新映射();let o=JSON.parse(JSON);让遍历=(父级,字段)=>{让obj=父级;let path=“#REF:$”;if(字段!==未定义){obj=父[字段];path=objToPath.get(父)+(Array.isArray(父)`[${field}]`:`${field?'。'+字段:''}`);}objToPath.set(obj,路径);pathToObj.set(路径,对象);let ref=路径目标获取(obj);如果(ref)父[字段]=ref;for(让f在obj中)if(obj==对象(obj))遍历(obj,f);}横向(o);返回o;}// ------------//测试// ------------设s=`{“o1”:{“o2”:{“a1”:1,“a2”:2,“a3”:[1.2.{“b1”:3,“b2”:“4”,“b3”:“#REF:$.o1.o2”}]}},“b”:“#REF:$.o1.o2.a3[2]”,“a”:“#REF:$.o1.o2”}`;console.log('打开Chrome控制台查看嵌套字段');let obj=parseRefJSON;console.log(obj);