Đối tượng

Đối tượng là một kiểu dữ liệu rời rạc theo cách tương tự như gốc là một loại dữ liệu trong đó có một thuộc tính quan trọng khác biệt: không giống như dữ liệu nguyên gốc, đối tượng có thể biến đổi. Một đối tượng có thể chứa dữ liệu liên kết với giá trị nhận dạng, như một biến, nhưng vẫn giữ lại dữ liệu object bất kể dữ liệu trong đó.

Ngoài giá trị gốc, tất cả giá trị JavaScript đều là đối tượng, mặc dù vì ngay cả khi các giá trị cố định gốc biểu thị hành vi giống đối tượng do tính kế thừa nguyên mẫu thường cho biết JavaScript được tạo thành từ các đối tượng.

Hằng đối tượng là một cặp dấu ngoặc nhọn bao quanh số 0 hoặc nhiều khoá-giá trị được gọi là "thuộc tính" tệp này có thể chứa bất kỳ giá trị JavaScript nào.

{
    "myProperty" : true
}

Khoá thuộc tính có thể là bất kỳ ký hiệu hoặc chuỗi. Như khi gán giá trị nhận dạng cho một biến, các chuỗi được dùng làm khoá thuộc tính phải dễ dự đoán và mô tả:

let carAttributes = {
    "color" : "red"
};

carAttributes
> Object { color: "red" }

Khoá thuộc tính yêu cầu một giá trị cố định dạng chuỗi (') hoặc dấu ngoặc kép ("), chứ không phải giá trị cố định của mẫu:

let carAttributes = {
    `keyString` : false
};
> Uncaught SyntaxError: expected property name, got template literal

Giá trị của thuộc tính có thể là bất kỳ loại dữ liệu nào. Các thuộc tính của một đối tượng có thể tự chứa các đối tượng có thuộc tính riêng:

let myObject = {
    'key' : {
        'subkey' : true,
        'othersubkey' : false
    }
};

myObject;
> Object { key: Object { subkey: true, othersubkey: false } }

Khi giá trị của một thuộc tính là một hàm, thuộc tính đó được gọi là "phương thức".

const myObject = {
    "myProperty" : true,
    myMethod() {
        console.log( "This is a method." );
    }
}

myObject.myProperty;
> true

myObject.myMethod();
> "This is a method."

Bạn cũng có thể tạo một đối tượng bằng từ khoá new:

let myObject = new Object();

Trong các ví dụ trước, các giá trị cố định của đối tượng mới tạo đã được chỉ định với các biến. Bạn không bắt buộc phải làm vậy vì giống như mọi loại dữ liệu khác, bạn có thể sử dụng đối tượng không có giá trị nhận dạng ở bất kỳ nơi nào đối tượng được dự kiến. Tuy nhiên, một đối tượng sẽ yêu cầu dấu ngoặc đơn trong bất kỳ ngữ cảnh nào có thể gây nhầm lẫn cho câu lệnh khối, vì hai câu lệnh này dùng chung cú pháp dấu ngoặc nhọn ({}). Việc khởi chạy một biến không bao giờ yêu cầu thực hiện việc này.

{ "value" : 2 }
> Uncaught SyntaxError: unexpected token: ':'

({ "value" : 2 })
> Object { value: 2 }

let valObj = { "value" : 2 };

valObj;
> Object { value: 2 }

Không giống như dữ liệu gốc, không có sự khác biệt đáng kể nào trong kết quả tạo một đối tượng sử dụng new Object() và tạo một đối tượng cố định, vì giá trị thì cả hai trường hợp đều sẽ là một đối tượng có các thuộc tính được kế thừa từ Nguyên mẫu Object. Tuy nhiên, có một điểm khác biệt trên thực tế giữa hai các cú pháp khác.

Từ khoá new phải xác định một đối tượng trống sẽ được điền dữ liệu sau đó:

let myObject = new Object();

myObject.booleanValue = true;
myObject.stringValue = "My string.";

Một đối tượng có thể được điền sẵn dữ liệu khi đối tượng được tạo:

let myObject = {
    'booleanValue' : true,
    'stringValue' : "My string."
};

Mặc dù ít được sử dụng trong thực tế, nhưng bạn có thể dùng new Object() để biến những thành phần cơ bản vào các đối tượng thuộc loại tương ứng, chẳng hạn như các đối tượng được trả về bằng cách sử dụng từ khoá new cùng với hàm khởi tạo . Ví dụ: hàm sau đây tương đương với new Number( 10 ):

let myObject = new Object( 10 );

myObject;
> Number { 10 }

Các giá trị nullundefined dẫn đến một đối tượng trống, có chức năng giống hệt nhau để gọi new Object() mà không cung cấp đối số.

Truyền một giá trị cố định đối tượng đến new Object() dưới dạng một đối số truyền đối tượng mà không thay đổi:

let myObject = new Object( { myValue : 10 } );

myObject;
> Object { myValue: 10 }

Tương tự như việc sử dụng hàm khởi tạo cho các giá trị gốc, hãy sử dụng hàm khởi tạo cho đối tượng hiếm khi có bất kỳ lợi ích nào so với việc sử dụng ký hiệu bằng chữ đối tượng. Ngay cả khi tạo các đối tượng trống sẽ được điền giá trị sau này, nhà phát triển có xu hướng ưu tiên đối tượng ký hiệu cố định nhằm mục đích đơn giản.

Kiểm tra kiến thức

Bạn có thể sử dụng các kiểu ký hiệu nào để đặt thuộc tính của một đối tượng?

Ký hiệu dấu chấm
Ký hiệu dấu ngoặc
Ký hiệu dấu chấm
Ký hiệu dòng

Câu nào sau đây là cú pháp chính xác để nhận giá trị / myProp

myObj["myProp"];
myObj{"myProp"};
myObj("myProp");