如何在JavaScript中挽救对象的未定义属性?

How can I rescue an undefined property of an object in JavaScript?

本文关键字:对象 未定义 属性 JavaScript      更新时间:2023-09-26

好的,假设你有两个对象:gregstacy。他们都是人。Greg的对象是这样的:

var greg = {
  name: "Greg",
  job: "doctor",
  age: 45
}

和Stacy是这样的:

var stacy = {
  name: "Stacy",
  age: 42
}

当有人试图访问Stacy的job属性时,我怎么能在不直接将其作为job的情况下返回"失业"?我想要一个不使用原型的解决方案,而且我真的宁愿不使用函数来访问对象的所有属性。

仅供参考:我将此用于Ajax自动加载系统,类似于Rails的服务器端系统。

我会使用这样的代码…使用默认值的构造函数:

function Person(cfg) {
  this.name = cfg.name || "John Q. Public";
  this.job = cfg.job || "Unemployed";
  // EDIT: This will allow for an age of '0' -- a newborn.
  this.age = typeof cfg.age === undefined ? null : cfg.age;
}
var greg = new Person({
  name: "Greg",
  job: "doctor",
  age: 45
});
var stacy = new Person({
  name: "Stacy",
  age: 42
});
console.log(stacy.job);

在提取属性时使用||指定默认值

var job = person.job || "Unemployed";

然而,这必须在你得到工作的每个地方完成。如果你不想在所有地方重复它,你需要使用一个函数或原型。

可以使用typeof:

进行显式检查
if (typeof obj.job === "undefined") { ..

或更简单:

console.log(obj.job || "Unemployed")

架构错误!

function Person(name, job, age) {
    this.name = name ? name : "no name";
    this.job = job ? job : "no job";
    this.age = age ? age : -1:
}
var greg = new Person("Greg", "doctor", 45);
var stacy = new Person("Stacy", null, 42);
console.log(stacy.job);
或者你打算为每个人写一个自己的静态类?