JavaScript对象通过字面量、构造函数或Object.create()创建;属性访问用点号(合法标识符)或方括号(动态/特殊字符键);方法中this默认指向对象本身,但回调中易丢失,需bind或箭头函数修复。

JavaScript 对象不用“创建”这个词——它没有类实例化那种严格流程,而是靠字面量、构造函数或 Object.create() 等方式生成;属性和方法访问也分点号(.)和方括号([])两种路径,选错就拿不到值甚至报错。
对象怎么写出来:字面量最常用,但别漏掉逗号和引号
日常写对象,{} 字面量是首选。注意三点:
- 属性名含空格、短横线或以数字开头,必须用引号包裹,比如
{"user-id": 123, "2nd-item": true} - 方法直接写函数,不用
function关键字前缀(ES6 简写),如getName() { return this.name } - 末尾逗号可选,但建议加——避免新增属性时漏写逗号导致语法错误(尤其多人协作)
示例:
const user = {
name: "Alice",
"full-name": "Alice Smith",
age: 30,
greet() {
return `Hello, ${this.name}`;
}
};
点号访问 vs 方括号访问:什么时候必须用 []
点号(.)简洁,但只认合法标识符;方括号([])灵活,能动态计算属性名。
- 用
.:属性名是纯字母/下划线/数字组合,且不以数字开头,比如user.name、user.greet - 必须用
[]:属性名含特殊字符(user["full-name"])、变量驱动(const key = "age"; user[key])、或运行时拼接(user["prop_" + index]) - 访问不存在的属性,两者都返回
undefined,不会报错;但调用undefined()就会抛TypeError
this 在方法里指向谁?别在回调里丢掉它
对象方法里的 this 默认指向该对象,但一旦被单独提取或传入回调,就容易丢失上下文。
立即学习“Java免费学习笔记(深入)”;
- 错误写法:
const fn = user.greet; fn();→this指向全局或undefined(严格模式) - 修复方式:用
.bind(user)、箭头函数包装、或直接调用user.greet() - 事件监听器中常见问题:
button.addEventListener("click", user.greet)同样丢失this,应改写为e => user.greet()或user.greet.bind(user)
原型链上的方法不能用点号“直接看到”,但能访问
像 toString()、hasOwnProperty() 这些不是对象自身属性,而是从 Object.prototype 继承来的。所以 user.toString 能取到函数,但 Object.keys(user) 不会列出它。
-
user.hasOwnProperty("name")返回true,但"hasOwnProperty" in user也返回true(因为继承) - 想确认是否是自有属性,用
Object.hasOwn(user, "name")(ES2022 新增,比hasOwnProperty更安全) - 不要重写
constructor或__proto__,容易破坏原型链行为
真正难的不是语法,是搞清属性在哪一层、this 绑定何时生效、以及方括号里那个字符串到底是不是你想要的键名。











