我认为 这条推文 可能是我的所有推文中转发量最高的,但我不知道现在该如何验证。 我在这里重新阐述一下这个巧妙的小技巧,因为写博客既酷又有趣。
我过去在调试 JavaScript 时经常这样做
console.log("myVariable: ", myVariable);
但现在我这样做是因为它更容易快速输入
console.log({ myVariable });
并且您不会错过 DevTools 中的任何内容

既然这是一篇博文,我就可以稍微详细说明一下……
那里的输出显示(实际上,console.log
本身)是 DevTools 的功能,但语法不是。 通过在 JavaScript 中使用花括号,我创建了一个对象。 我不必将对象分配给任何东西,它可以只是存在。
{
foo: "bar"
}
当您将对象传递给函数时,例如 myFunction({ config: options });
,您会经常看到这种情况。“技巧”在于,当您创建对象时,您可以通过仅提供变量来“缩写”它,这使其变得隐含)。就像
const fruit = "apple";
// Shorthand
let x = {
fruit
}
console.log(x);
// Normal way, literally the same exact thing
x = {
"fruit": fruit
}
console.log(x); // identical
当您有一个变量并像 console.log({ myVariable });
那样记录它时,您正在使用该简写对象创建语法,并且它会像它变成的对象一样被记录。
这个想法的一个缺点是,有时 DevTools 选择将其输出为 ▶ Object,您必须单击以打开才能查看值。 我不知道它何时选择这样做以及何时不这样做的方法是什么。 如果您不喜欢这样,或者通常不喜欢对象的输出格式,您可能更喜欢 console.table({ myVariable });
格式

巧妙的技巧,但更快的方法是在文本编辑器中为类似这样的常用操作添加代码片段。 在 Sublime Text 中,我将
l;
映射到console.info('${1}', ${2:$1});
。 然后我只需键入l;<tab>someVarName
,它就会扩展并将变量名填充到两个位置。VS Code 中也可以使用相同的方法,但您需要调整一些设置才能使其在 . 上立即扩展。
太棒了!
这通常发生在打印值时 DevTools 关闭时。
感谢!感谢您的启发!
这里有一个需要注意的地方。 当您展开 ▶ Object 时,您看到的是当前值,而不是
console.log
运行时的值。 举个例子当您打开控制台并展开 ▶ Object 时,您将看到
{example: {foo: "second"}}
,而不是{example: {foo: "one"}}
。 我知道无论您是否使用博文中解释的技巧,这都可能发生,但我认为值得指出。我的第一个 Js 调试是 alert( myvariable ); 而且非常烦人。
嗨,Chris,
感谢您提供如此棒的技巧。
我不是 JS 中使用花括号的忠实粉丝,但是 console.table() 函数引起了我的注意。
它在控制台上看起来很酷。 此外,我正在考虑在我的最新一篇关于 JS 的博文中改进/实现这个技巧 https://letstacle.com/javascript-hello-world-example-step-by-step-explained-code
您的反馈对我来说非常宝贵。 请随时查看。
继续努力。
这是一个很酷的技巧,但请注意 - 您刚刚创建的对象是活动的,在某些情况下可能不会被垃圾回收器回收。
谢谢 Chris!这是一个不错的技巧!
此外,我仍然经常在我的代码中使用
debugger;
- 或者这已经过时了?! 这样我就可以在停止的代码状态下点击四处,找出有趣的事情。真是个很棒的想法!!!
当我第一次看到这篇文章的标题时,我已经知道它要说什么了,但是……想知道为什么我之前没有想到这个技巧,因为我知道它背后的概念,并且一直在寻找一种方法来做到这一点!
感谢您的这个想法!
我喜欢人们分享这些知识,我尤其喜欢人们分享他们的 TIL 参考。 也就是说,这条推文和帖子在某种程度上让人感觉奇怪,原因是非技术性的:这个想法之前从其他一些推文中获得了关注,Chris 在不久之后就发布了它,没有任何参考,也没有说“嘿,我在 @whatever 上看到了这个,我发现它是最棒的想法,所以我分享一下”或者“我的朋友刚刚告诉我他在 @whatever 上读到了这个”。
在我们这个领域,承认他人的参考/想法非常重要,这就是为什么我不太喜欢它在 Chris 的帐户上流行的方式,因为它感觉像是他忽略了获取这个简单但巧妙的“技巧”的地方。 仅代表我个人观点。
(当然,我并不是在说我自己)
感谢您的分享。
我从与同事的结对编程中获得了这个技巧。 如果有一些巧合让我看起来像是从其他推文中“窃取”了这个想法,那么我很抱歉,但我没有。 该技术基于 JavaScript 中存在的东西,看起来大约有五年了。
这启发我创建了这个
并像这样调用它
一切都格式化得很好 :)
一种更快的执行此操作的方法是利用 IDE 应该提供的功能。
例如,在 PyCharm/Webstorm 中,我设置了一个实时模板,它允许我键入
clv
,按Tab
,然后键入我的变量名称,它会自动插入console.log('foo', foo)
。当我教授开发人员时,他们总是对了解到他们在选择的 IDE 中一直没有使用所有这些编码帮助而感到惊讶。
让我感到沮丧的一件事是,当您想在一行中打印一些内容以及对象时,例如
console.log(
**** Debug_jwir3: inside some function: ${object)
);在这种情况下,除非我使用单独的 console.log 仅使用变量,否则 object 不会扩展(只是转换为字符串)。
使用逗号而不是字符串连接,例如
console.log("****Debug_jwir3: inside some function:", object);
它将在与独立时相同的调试输出中呈现。
为什么不使用 console.log(
myVariable:${myVariable}
);我想这不太简洁..
我想你需要在那里使用反引号才能使其工作。 而且我认为重点是简洁性。
您好,
正在学习 javascript,偶然发现了这篇博文。 非常有见地! 并且很有帮助,因为我必须在学习时逐行 console.log。 这个技巧帮助我更容易区分哪个输出来自哪个变量。
但是当我尝试将其与数组结合使用时,遇到了一些麻烦。 它似乎不起作用?
关于我在这里做错了什么,您有什么想法吗
const colors = ["groen", "geel", "rood", "paars", "blauw", "oranje"];
console.log(colors[4]);
console.log(colors[1]);