获取对象属性而不提示未定义的错误

时间:2018-03-06 08:29:01

标签: javascript ecmascript-6

我有这个对象,它有冗余属性,有时id存在,有时id2存在。我无法控制来源。

const obj = {
      id: 123, // one of this is gone depends on the condition
      id2: 123 // one of this is gone depends on the condition
    }

如何将getId的值分配给id的{​​{1}}或id2

试过这个,但这会触发未定义的错误并导致整个应用程序崩溃。 obj

4 个答案:

答案 0 :(得分:0)



var obj = { id2 : "some value" };
const getId = obj.id || obj.id2 || "both are absent";
console.log(getId);






var obj = {};
const getId = obj.id || obj.id2 || "both are absent";
console.log(getId);




您可以使用||运算符并获取其中任何一个值。

答案 1 :(得分:0)

您可以检查obj.id是否存在,然后将值指定给getId。试试以下

const obj = {
  id: 123, // one of this is gone depends on the condition
  id2: 123 // one of this is gone depends on the condition
}
const getId = (typeof obj.id != "undefined") ? obj.id : obj.id2;
console.log(getId);

<强>被修改

在@SharonChai评论之后我正在修改我的答案,所以你在三元运算符中添加!==更好更快。

const getId = (typeof obj.id !== "undefined") ? obj.id : obj.id;

答案 2 :(得分:0)

试试这个:

同时id&amp; id2存在:

&#13;
&#13;
var obj = {
      id: 123, // one of this is gone depends on the condition
      id2: 123 // one of this is gone depends on the condition
    }

var getId; 

Object.keys(obj).length ? getId = Object.keys(obj).map(item => obj[item]) : getId = "No property found in obj"; 

console.log(getId);
&#13;
&#13;
&#13;

当其中任何一个(idid2)出现时:

&#13;
&#13;
var obj = {
      id: 123
    }

var getId; 

Object.keys(obj).length ? getId = Object.keys(obj).map(item => obj[item]) : getId = "No property found in obj"; 

console.log(getId);
&#13;
&#13;
&#13;

当它们都不存在时:

&#13;
&#13;
var obj = {
    }

var getId; 

Object.keys(obj).length ? getId = Object.keys(obj).map(item => obj[item]) : getId = "No property found in obj"; 

console.log(getId);
&#13;
&#13;
&#13;

答案 3 :(得分:0)

只检查一个属性是否不可用,然后使用另一个属性。您可以通过多种方式完成此任务:

function getId(obj) {
  return "id" in obj ? obj.id : obj.id2;
  return obj.hasOwnProperty("id") ? obj.id : obj.id2;
  return obj.id !== undefined ? obj.id : obj.id2;
}