对象是一种复杂的数据类型,它存储值并允许使用特定键访问它们。对象内部的键/值组合称为属性。
JavaScript 是一种面向对象的编程语言。这意味着几乎每个值都是一个对象。某些类型的值被称为 primitives,它们被视为“基础”,作为简单的数据类型。这些原语是字符串、数字、布尔值、null 和 undefined。
(请注意,除了布尔值、null 和 undefined,所有原语也是秘密对象,因为只有对象可以有方法——你有String.split、Number.toString等)
还有很多其他的数据类型,它们是一种特定的对象:
- 数组以索引方式存储值,并保证顺序(与对象不同)
- 函数接收值、执行代码并可能返回一个值以供以后使用
- 集合类似于数组,但只存储唯一值
然而,许多人在想到“对象”时会想到对象字面量。它看起来像这样:
const myObject = {
name: "Jack",
cool: false,
friends: 0
pets: ["Dog", "Cat", "Snake"]
};
您可以看到对象属性的格式为key: value,如果属性更多,则在后面加上逗号,(在ES6中,允许使用逗号结尾)。
对象也可以包含方法:
const myObject = {
name: "Jack",
sayHello: function() {
console.log(`Hello, my name is ${this.name}!`);
}
};
注意:当在对象中创建方法时,最高层的函数(在本例中为sayHello之后的部分),必须是一个ES5-样式函数,以便对this 的引用正常运行。如果嵌套函数(如 setTimeout)也需要引用对象,则它们必须是 ES6 风格的函数,因为箭头函数(=>)不带有自己的 this 绑定。
对象也可以使用构造函数 (ES5) 或类 (ES6) 来构造。
构造函数必须是 ES5 函数,并且在其中分配所有属性(通常来自传递的参数):
function MyObject(name, cool) {
this.name = name;
this.cool = cool;
}
var jack = new MyObject("Jack", false);
var bob = new MyObject("Bob", true);
console.log(jack);
console.log(bob);
.as-console-wrapper { max-height: 100% !important; top: auto; }
要将方法附加到新对象,您可以将它们附加到构造函数的prototype:
function MyObject(name, cool) {
this.name = name;
this.cool = cool;
}
MyObject.prototype.sayHello = function() {
console.log(`Hello, I am ${this.name}`);
};
var jack = new MyObject("Jack", false);
var bob = new MyObject("Bob", true);
jack.sayHello();
bob.sayHello();
ES6 类是对构造函数的重新设计。您有一个 constructor 函数,您可以在其中定义所有属性,并将所有其他方法放在同一个位置。这是我们的 MyObject 构造函数转换为 ES6 类:
class MyObject {
constructor(name, cool) {
this.name = name;
this.cool = cool;
}
sayHello() {
console.log(`Hello, I am ${this.name}`);
}
}
let jack = new MyObject("Jack", false);
let bob = new MyObject("Bob", true);
jack.sayHello();
bob.sayHello();
您还可以将对象放入其他数据容器中 - 例如对象和数组。如果你把一个对象放在一个对象里面,你就有一个嵌套对象:
const parent = {
nested: {
value: "I am nested"
}
};
console.log(parent.nested.value);
正如您在上面看到的,您可以使用点表示法访问对象的不同属性和方法。但是如果你有一个想要获取的属性,但是属性名存储在一个变量中呢?您需要使用动态属性表示法,也称为方括号表示法(因为它涉及方括号[]):
const obj = {
aReallyObscureKey: "Hello!"
};
const key = "aReallyObscureKey";
console.log(obj[key]);
数组也可以保存对象:
const arrayOfObjects = [{
name: "Jack",
cool: false
}, {
name: "Bob",
cool: true
}];
console.log(arrayOfObjects);
.as-console-wrapper { max-height: 100% !important; top: auto; }
希望这会有所帮助。以下是一些链接,可帮助您了解有关对象的更多信息: