debugging console.dir -如何显示它应用于/标记它的对象?

ezykj2lf  于 12个月前  发布在  其他
关注(0)|答案(3)|浏览(230)

给定一个声明,如
第一个月
我可以写console.dir(myobj)。这将导致

{ a: 1, b: 2 }

字符串
但是,假设我想在一个复杂的调试会话中提醒自己,console.dir是关于什么的:
我可以写
console.log("myobj"); console.dir(myobj);
这将打印

myobj
{ a: 1, b: 2 }


但有点笨重。
使用console.log("myobj:" + myobj);
打印出

myobj:[object Object]


这根本不起作用。有没有更好的方法来标记console.dir

vvppvyoh

vvppvyoh1#

你可以把你命名的变量 Package 在一个对象中,然后这个名字将作为第一层扩展可见。

myobj = {a:1, b:2};

console.dir({myobj});

字符串
如果你想让顶级 Package 器成为你的变量名,你也可以使用“groups”。也许你想用某种帮助器来做到这一点(我甚至不建议这样做,但它可能会满足你的需求,所以只是作为演示展示):

function labeledConsoleDirGroup(wrappedVar) {
  const varName = Object.keys({myobj})[0];
  console.group(varName);
  console.dir(wrappedVar[varName]);
  console.groupEnd(varName);
}

// Later ...
const myobj = {a: 1, b: 2};
labeledConsoleDirGroup({myobj});


请注意,这在内置代码段运行器中不起作用,因为它不支持组。但在Chrome中看起来像这样:


的数据

vcudknz3

vcudknz32#

dir和log有多个参数,你会得到最后一个输出,因为你不能把一个字符串连接到一个对象上,这里有一个正确的方法:

console.log("myobj:", myobj);

字符串
使用逗号,只传递多个参数。

zbsbpyhn

zbsbpyhn3#

如果使用Node.js,你可以通过使用process.stdout.writeprint the label without a trailing newline

function inspect(label, data) {
  process.stdout.write(`${label}: `)
  console.dir(data, { depth: null })
}

字符串
{ depth: null }在这里是无关紧要的,但这也是我在Node.js中使用console.dir的原因;它允许logging objects without deeply nested sub-objects being abbreviated as [Object]和数组缩写为[Array]
示例如下:

const myobj = {
  foo: {
    bar: {
      baz: {
        qux: true,
        ham: 'spam',
      },
      items: [1, 2, 3],
    },
  },
}

console.log('my object:', myobj)
//=> my object: { foo: { bar: { baz: [Object], items: [Array] } } }

inspect('my object', myobj)
//=> my object: {
//     foo: { bar: { baz: { qux: true, ham: 'spam' }, items: [ 1, 2, 3 ] } }
//   }

相关问题