JavaScript 中的 Object
数据类型是一种复合数据类型,用于存储键值对(key-value pairs)。它是 JavaScript 中最常用的数据结构之一,可以表示现实世界中的各种实体和概念。
可以通过多种方式创建对象:
// 字面量方式
let person = {
name: "Alice",
age: 25,
greet: function() {
console.log("Hello, my name is " + this.name);
}
};
// 构造函数方式
function Person(name, age) {
this.name = name;
this.age = age;
this.greet = function() {
console.log("Hello, my name is " + this.name);
};
}
let bob = new Person("Bob", 30);
使用点符号或方括号访问对象的属性:
console.log(person.name); // 输出: Alice
console.log(person['age']); // 输出: 25
对象中的函数称为方法,可以通过对象调用:
person.greet(); // 输出: Hello, my name is Alice
可以使用 for...in
循环遍历对象的属性:
for (let key in person) {
console.log(key + ": " + person[key]);
}
JavaScript 中的对象通过原型链继承属性和方法。每个对象都有一个内部属性 [[Prototype]]
,指向其原型对象。
console.log(person.__proto__ === Object.prototype); // 输出: true
Array
, Date
, RegExp
等。当多个对象共享相同的属性名时,可能会发生冲突。
解决方法:使用唯一的键名或使用 Symbol 类型的键。
let sym = Symbol('key');
person[sym] = "unique value";
直接赋值对象会导致引用传递,修改一个对象会影响另一个。
解决方法:使用 JSON.parse(JSON.stringify(obj))
进行深拷贝(不适用于包含函数的对象),或使用递归函数实现深拷贝。
function deepCopy(obj) {
return JSON.parse(JSON.stringify(obj));
}
不当修改原型对象可能导致所有实例受到影响。
解决方法:避免直接修改内置对象的原型,使用类和继承来管理对象的创建和行为。
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(this.name + ' makes a noise.');
}
}
class Dog extends Animal {
speak() {
console.log(this.name + ' barks.');
}
}
let dog = new Dog('Rex');
dog.speak(); // 输出: Rex barks.
通过上述方式,可以有效地管理和操作 JavaScript 中的对象数据类型。
领取专属 10元无门槛券
手把手带您无忧上云