




JavaScript对象创建首选字面量{},安全且语义清晰;属性访问需区分dot(合法标识符)与bracket(动态/特殊键);判断存在性时in查原型链、hasOwnProperty查自身、?.仅防错不判存在。
JavaScript 对象不需要“教程式创建”,关键在于理解不同场景下该用哪种方式,以及属性访问时的隐含行为差异。
绝大多数情况直接用 {} 就够了,它创建的是普通对象,原型链干净,无副作用。
const user = { name: "Alice", age: 30 };
const key = "id"; const obj = { [key]: 123, greet() { return "hi"; } };
new Object() —— 冗余且易与构造函数混淆,语义不清. 只能接合法标识符,[] 才能处理动态键、空格、数字开头等非常规属性名。
obj.name、obj["first name"]、obj[variable]、obj[123]
obj.123(语法错误)、obj.first name(解析为两个 token)obj.undefinedKe
y 返回 undefined,但 obj[undefined] 等价于 obj["undefined"] —— 这是常见误判点in、hasOwnProperty 和可选链前先想清楚查什么判断属性是否存在,三者查的范围和意图完全不同:
"prop" in obj:检查自身 + 原型链上是否有该属性(包括继承的 toString)obj.hasOwnProperty("prop"):只查自身(不推荐直接调用,应写成 Object.prototype.hasOwnProperty.call(obj, "prop") 防止 obj 为 null 或覆盖了 hasOwnProperty)obj?.prop:只在 obj 非 null/undefined 时取值,否则短路返回 undefined;它不判断属性是否存在,只防报错属性访问看着简单,但实际出问题多发生在动态键、原型污染、或把 undefined 当作“不存在”来处理的地方。别假设对象结构永远如你所见。