Angular JS中如何用console.log显示对象所有属性?常规方法失效
这种情况我在开发中碰到过好多次,大多是因为对象被封装过、自定义了toString方法,或者是某些特殊类型的实例导致的。别慌,试试下面这些实用方法,应该能帮你挖出对象的真实属性:
优先用
console.dir(obj)替代console.logconsole.log默认会调用对象的toString方法输出,而console.dir是专门用来展示对象完整结构的工具,包括原型链上的属性、不可枚举属性,还能展开查看层级。很多时候换这个方法就能直接看到你要的内容。把对象序列化为JSON字符串
如果console.dir也不好使,试试将对象转成格式化的JSON:console.log(JSON.stringify(obj, null, 2))这个方法能把所有可序列化的属性清晰打印出来。要是遇到循环引用或者不可序列化的内容(比如函数、Symbol),可以加个替换函数处理:
console.log(JSON.stringify(obj, (key, value) => { if (typeof value === 'function') return '[Function]'; if (typeof value === 'symbol') return value.toString(); return value; }, 2))检查并绕过自定义的
toString方法
你看到的'obj obj'大概率是对象自定义了toString方法导致的。先验证一下:console.log(obj.toString()) // 如果输出'obj obj',就实锤了这时候可以直接调用原型上的原生
toString来看对象类型:console.log(Object.prototype.toString.call(obj))然后用
Object.getOwnPropertyNames(obj)获取所有自身属性名(包括不可枚举的),再逐个查看属性值:const props = Object.getOwnPropertyNames(obj); props.forEach(prop => console.log(`${prop}:`, obj[prop]))Node.js环境下用
util.inspect
如果你是在Node.js里开发,Node的util模块提供了更强大的对象检查工具:const util = require('util'); console.log(util.inspect(obj, { showHidden: true, depth: null, colors: true }))配置
showHidden: true能看到隐藏属性,depth: null会展开所有层级,colors: true让输出更易读。排查对象是否被冻结/密封
虽然这种情况少见,但如果对象被冻结或密封,也可能影响属性的查看。可以用下面的方法检查:console.log(Object.isFrozen(obj)); // 检查是否被冻结 console.log(Object.isSealed(obj)); // 检查是否被密封
先从console.dir开始试,这个最快捷,不行再依次尝试其他方法,应该总有一个能帮你拿到想要的属性信息。
内容的提问来源于stack exchange,提问作者user8317064

