Jer*_*ith 123 google-chrome-devtools
每个单一时间我在控制台中查看一个对象我想要扩展它,所以每次单击箭头来执行此操作都很烦人:)是否有自动完成此操作的快捷方式或设置?
gak*_*gak 32
可能不是最好的答案,但我一直在我的代码中的某个地方这样做.
更新:
用于JSON.stringify
自动扩展对象:
> a = [{name: 'Joe', age: 5}, {name: 'John', age: 6}]
> JSON.stringify(a, true, 2)
"[
{
"name": "Joe",
"age": 5
},
{
"name": "John",
"age": 6
}
]"
Run Code Online (Sandbox Code Playgroud)
你总是可以创建一个快捷方式功能,如果它输入所有这些都很痛苦:
j = function(d) {
return JSON.stringify(d, true, 2)
}
j(a)
Run Code Online (Sandbox Code Playgroud)
上一个答案:
pretty = function(d)
{
var s = []
for (var k in d) {
s.push(k + ': ' + d[k])
}
console.log(s.join(', '))
}
Run Code Online (Sandbox Code Playgroud)
然后,而不是:
-> a = [{name: 'Joe', age: 5}, {name: 'John', age: 6}]
-> a
<- [Object, Object]
Run Code Online (Sandbox Code Playgroud)
你做:
-> a.forEach(pretty)
<- name: Joe, age: 5
name: John, age: 6
Run Code Online (Sandbox Code Playgroud)
不是最好的解决方案,但适合我的使用.更深的对象将无法工作,因此可以改进.
lor*_*non 24
虽然提到的解决方案JSON.stringify
对于大多数情况来说非常好,但它有一些限制
console.log
可以优雅地处理这些对象.这是一个解决方案(使用underscore.js库),通过创造性地(ab)使用console.group
以下方法解决上述问题:
expandedLog = (function(){
var MAX_DEPTH = 100;
return function(item, depth){
depth = depth || 0;
if (depth > MAX_DEPTH ) {
console.log(item);
return;
}
if (_.isObject(item)) {
_.each(item, function(value, key) {
console.group(key + ' : ' +(typeof value));
expandedLog(value, depth + 1);
console.groupEnd();
});
} else {
console.log(item);
}
}
})();
Run Code Online (Sandbox Code Playgroud)
现在运行:
expandedLog({
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
})
Run Code Online (Sandbox Code Playgroud)
会给你类似的东西:
可以将MAX_DEPTH的值调整到所需的级别,超出嵌套级别 - 扩展日志将回退到通常的console.log
尝试运行类似:
x = { a: 10, b: 20 }
x.x = x
expandedLog(x)
Run Code Online (Sandbox Code Playgroud)
请注意,可以轻松删除下划线依赖项 - 只需从源中提取所需的函数.
另请注意,这console.group
是非标准的.
tfm*_*gue 10
默认情况下,Chrome 和 Safari 浏览器上的控制台将输出折叠的对象,带有排序的属性键,并包含所有继承的原型链。
我个人不是粉丝。大多数开发人员需要没有原型链的对象的原始输出,并且其他任何内容都应该选择加入。折叠的对象浪费了开发人员的时间,因为他们需要扩展它们,如果他们想要更少的输出,他们可以只记录他们需要的属性键。自动排序属性键使开发人员无法检查自己的排序是否正确,这可能会导致错误。最后,普通的 Javascript 开发人员不会花太多时间在继承的原型链上,因此这会增加日志的噪音。
受到推崇的
console.log(JSON.stringify({}, undefined, 2));
也可以用作函数:
console.json = object => console.log(JSON.stringify(object, undefined, 2));
console.json({});
Run Code Online (Sandbox Code Playgroud)
“Option + Click”(Mac 上的 Chrome)和“Alt + Click”(Window 上的 Chrome)
但是,并非所有浏览器(例如 Safari)都支持它,控制台仍然会打印原型链、自动排序属性键等。
不建议
我不会推荐任何一个最重要的答案
console.table()
- 这只是浅层扩展,不会扩展嵌套对象
编写一个自定义的 underscore.js 函数 - 对于一个简单的解决方案来说开销太大
小智 7
这是lorefnon的答案的修改版本,它不依赖于underscorejs:
var expandedLog = (function(MAX_DEPTH){
return function(item, depth){
depth = depth || 0;
isString = typeof item === 'string';
isDeep = depth > MAX_DEPTH
if (isString || isDeep) {
console.log(item);
return;
}
for(var key in item){
console.group(key + ' : ' +(typeof item[key]));
expandedLog(item[key], depth + 1);
console.groupEnd();
}
}
})(100);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
37861 次 |
最近记录: |