Javascript 如何检查对象中的键是否为对象

Javascript 如何检查对象中的键是否为对象,javascript,Javascript,我的练习用于…在中打印出对象中的所有键,打印出嵌套对象的键。但我不检查nameValue的值是否为object 我试图在中使用for…但值检查的结果未定义 //我的练习 var公寓={ 卧室:{ 面积:20, 床:{ 类型:“双人床”, 价格:100 } } }; //尝试 功能检查OBJ(objs){ for(objs中的var obj){ 控制台日志(obj); var check=objs['obj']; 控制台日志(检查); } } checkObj(公寓)

我的练习用于…在中打印出对象中的所有键,打印出嵌套对象的键。但我不检查nameValue的值是否为object

我试图在中使用for…但值检查的结果未定义

//我的练习
var公寓={
卧室:{
面积:20,
床:{
类型:“双人床”,
价格:100
}
}
};
//尝试
功能检查OBJ(objs){
for(objs中的var obj){
控制台日志(obj);
var check=objs['obj'];
控制台日志(检查);
}
}

checkObj(公寓)typeof null
中,
typeof[]
typeof{}
将返回
'object'

您可以检查
对象的
构造函数.name
是否等于
'object'

function checkObj(objs) {
    for (var obj in objs) {
        var isObj = objs[obj] && objs[obj].constructor.name === 'Object';
        console.log('is Object:', isObj);
    }
}

checkObj(apartment);
正如@ZivBen或评论中建议的那样,您也可以这样检查它

Object.prototype.toString.call(obj[key]) === "[object Object]"

您可以使用此函数确定值是否为object

function isObject (item) {
  return (typeof item === "object" && !Array.isArray(item) && item !== null);
}
as
typeof[]
也是一个
对象

var公寓={
卧室:{
面积:20,
床:{
类型:“双人床”,
价格:100
},
测试:[1,2,3]
}
};
功能对象(项目){
返回(typeof item==“object”&&&!Array.isArray(item)&&item!==null);
}
功能检查OBJ(objs){
for(objs中的var obj){
控制台日志(obj);
var检查=等值对象(objs[obj]);
控制台日志(检查);
}
}

checkObj(公寓)通过检查铲斗液位是否为对象来打印所有键和值

这是您可以识别对象是否存在的方法

更新为验证
null
array

//我的练习
var公寓={
卧室:{
面积:20,
床:{
类型:“双人床”,
价格:100
}
},
卧室1:null,
卧室2:[],
卧室3:{}
};
//尝试
功能检查OBJ(objs){
for(objs中的var obj){
if(objs[obj]!==null&&typeof objs[obj]===='object'&&objs[obj]。构造函数!==Array){
checkObj(objs[obj]);
}否则{
log(obj',:',objs[obj]);
}
}
}

checkObj(公寓)在JavaScript中,基本上所有东西都是一个对象。请尝试使用此方法将更广泛的
对象原型
与键/值的对象
区分开来
pairs({})。
我给了你一个例子,你可以在你的代码中试试看,看得更清楚。我也附加了你的代码

var公寓={
卧室:{
面积:20,
床:{
类型:“双人床”,
价格:100
}
}
};
var isPlainObject=函数(obj){
返回Object.prototype.toString.call(obj)='[Object-Object]';
};
控制台日志(isPlainObject(公寓));
控制台.日志(isPlainObject(公寓.卧室));
控制台.日志(isPlainObject(公寓.卧室.床));
//返回false
log(isPlainObject(['wolverine','magnomer','cyclops'))
//返回false
console.log(isPlainObject(null))
//你的代码
功能检查OBJ(objs){
for(objs中的var obj){
var check=isPlainObject(objs[obj]);
log(“您的代码”,检查);//返回true
}
}

checkObj(公寓)
这里有一个递归函数,它在对象键上运行,如果属性的值是
对象,它将再次调用该函数。
我使用
Object.prototype.toString.call(obj[key])====“[Object Object]”
和not
类型的obj[key]==='Object'
来检查属性是否是对象上的对象,而不是
数组的对象或
函数的对象

var公寓={
卧室:{
面积:20,
床:{
类型:“双人床”,
价格:100,
数组:[1,2,3],
方法:函数(){}
}
}
}
函数printObjectKeys(obj){
for(obj中的var键){
控制台日志(键);
if(Object.prototype.toString.call(obj[key])==“[Object Object]”){
printObjectKeys(obj[key]);
}
}
}

console.log(printObjectKeys(公寓))
我相信JavaScription中有一个isObject函数,您可能想使用
objs[obj]
而不是
objs['obj']
如何知道该值是否为对象您想检查该值是否为对象
{}
,如果是数组
[]
null
?因为在Javascript中,所有3个都是
对象
,不要忘记函数也是对象。你的想法很好。我刚学了Javascript,所以我不知道know@AgnesK.Rivers我认为,既然您知道它们都是
对象
,那么您应该编辑问题并包括是否要检查数组
[]
null
s,或者只检查对象作为
{}
,另一种方法是:
object.protostring.call(obj[key])==”[对象]”
@ZivBen或感谢分享,我会将其包含在回答中。如果属性的值是
数组
函数
@ZivBen,或者,OP已经分享了示例JSON,OP已经说他的练习已经完成。根据OP示例JSON,这是足够和最小的用于标识对象的条件。如何检查值是数组、对象还是函数对象,以及null@AgnesK.Rivers,那么您应该在问题中包含您的要求。请更新问题。我将尝试相应地更新答案。函数值如何?我没有复制粘贴您的答案
objs[obj] !== null && typeof objs[obj] === 'object' && objs[obj].constructor !== Array