Javascript 如何获取对象';不带冗余的属性名称';名称';对象内部的键?以及如何返回';名称';用户提供的未定义对象的名称?

Javascript 如何获取对象';不带冗余的属性名称';名称';对象内部的键?以及如何返回';名称';用户提供的未定义对象的名称?,javascript,object,Javascript,Object,有没有什么方法可以在不进行排序的情况下获取对象的属性名 对象本身内部是否存在冗余的“name”属性?这将主要用于 在我们看到一个用户试图获取一个不存在的对象的情况下 例如: let myObject = { favoriteListing: { name: 'favoriteListing', category: 'favorite', action: 'add' }, sendListing: { name

有没有什么方法可以在不进行排序的情况下获取对象的属性名 对象本身内部是否存在冗余的“name”属性?这将主要用于 在我们看到一个用户试图获取一个不存在的对象的情况下

例如:

let myObject = {
    favoriteListing: {
        name: 'favoriteListing',
        category: 'favorite',
        action: 'add'
    },
    sendListing: {
        name: 'sendListing',
        category: 'send',
        action: 'sms'
    }
};

let displayObj = (object) => {
    if (!object) {
        console.warn(`Whoa, cowboy. ${object.name} does not exist!`);
        return;    
    } else {
        return object;
    }
}
预期产出与实际产出之比:

displayObj(myObject.favoriteListing);
/*
Output:
    => { name: 'favoriteListing', category: 'favorite', action: 'add' }
*/

displayObj(myObject.dammitBatman);
/*
Desired Output:
    => Whoa, cowboy. 'dammitBatman' does not exist!

Actual Output:
    => TypeError: Cannot read property 'name' of undefined
*/
我认为你应该使用:


将对象和属性名称分开会有帮助吗?例如:

let displayObj = (obj,propertyName) => {    
    return obj && obj[propertyName] || console.warn(`Whoa, cowboy. ${propertyName} does not exist!`);
}
这里我们测试对象是否未定义,并返回其命名属性或记录错误。
简洁的!和javascripty(-:

在引用该属性之前,必须测试该属性是否存在

let displayObj = (object, property) => {
    if (!object[property]) {
        console.warn(`Whoa, cowboy. ${property} does not exist!`);
        return;    
    } else {
        return object;
    }
}


displayObj(myObject, "joe");

displayObj(myObject, "sendListing");

您可以从
myObject
对象中删除名称redundantn
name
属性,并修改
displayObj()
函数,如下所示:

let displayObj = (obj, name)=>{
    if(!obj[name]) {
        console.warn("Whoa, cowboy. " + name + " does not exist!`");
        return
    }else return obj[name];
}
已编辑

let displayObj = (obj, name)=>{
    if(!obj){ 
        console.warn("Unable to get " + name + "property of " + obj)
        return
    }
    if(!obj[name]) {
        console.warn("Whoa, cowboy. " + name + " does not exist!`");
        return
    }
    return obj[name];
}

函数无法知道哪个参数属于哪个对象及其属性名。因此,不可能获得预期的结果

但是,多亏了javascript,我们通过一些修改实现了这一点

下面的代码片段是根据您的需求设计的

const PROPERTY=Symbol('PROPERTY');
类别无效属性{
构造函数(propertyName){
此[属性]=属性名称;
}
获取属性(){
归还此[财产];
}
}
函数createProxy(obj){
返回新代理(obj{
获得(目标、道具){
如果(!target.hasOwnProperty(prop)){
归还新的无效财产(道具);
}
返回目标[道具];
}
});
}
让displayObj=(对象)=>{
if(InvalidProperty的对象实例){
console.warn(`Whoa,cowboy.${object.property}不存在!`);
}否则{
console.log(对象);
}
}
让myObject=createProxy({
收藏夹列表:{
名称:“favoriteListing”,
类别:'最爱',
操作:“添加”
},
发送列表:{
名称:“发送列表”,
类别:“发送”,
行动:“短信”
}
});
displayObj(myObject.sendListing);

displayObj(myObject.thisDoesNotExist);
您可以在if语句中引发异常分离对象和属性名会有帮助吗?另一种方法已经发布了,是的。这看起来很简单!非常简单。谢谢!
let displayObj = (obj, name)=>{
    if(!obj){ 
        console.warn("Unable to get " + name + "property of " + obj)
        return
    }
    if(!obj[name]) {
        console.warn("Whoa, cowboy. " + name + " does not exist!`");
        return
    }
    return obj[name];
}