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