Loại đối tượng trong JavaScript là gì?

Một đối tượng javaScript là một thực thể có trạng thái và hành vi [thuộc tính và phương thức]. Ví dụ. xe hơi, bút, xe đạp, ghế, kính, bàn phím, màn hình, v.v.

JavaScript là một ngôn ngữ dựa trên đối tượng. Mọi thứ đều là đối tượng trong JavaScript

JavaScript dựa trên mẫu không dựa trên lớp. Ở đây, chúng ta không tạo lớp để lấy đối tượng. Nhưng, chúng tôi trực tiếp tạo các đối tượng

Tạo đối tượng trong JavaScript

Có 3 cách tạo đối tượng

  1. Theo đối tượng theo nghĩa đen
  2. Bằng cách tạo trực tiếp đối tượng [sử dụng từ khóa mới]
  3. Bằng cách sử dụng một hàm tạo đối tượng [sử dụng từ khóa mới]

1] Đối tượng JavaScript theo nghĩa đen

Cú pháp tạo đối tượng bằng cách sử dụng đối tượng chữ được đưa ra dưới đây

Như bạn có thể thấy, thuộc tính và giá trị được phân tách bằng. [Đại tràng]

Hãy xem ví dụ đơn giản về tạo đối tượng trong JavaScript

Kiểm tra nó ngay bây giờ

Đầu ra của ví dụ trên

2] Bằng cách tạo phiên bản của Đối tượng

Cú pháp tạo đối tượng trực tiếp được đưa ra dưới đây

Ở đây, từ khóa new được sử dụng để tạo đối tượng

Hãy xem ví dụ tạo đối tượng trực tiếp

Kiểm tra nó ngay bây giờ

Đầu ra của ví dụ trên

3] Bằng cách sử dụng hàm tạo đối tượng

Ở đây, bạn cần tạo hàm với các đối số. Mỗi giá trị đối số có thể được gán trong đối tượng hiện tại bằng cách sử dụng từ khóa này

Từ khóa this đề cập đến đối tượng hiện tại

Ví dụ về việc tạo đối tượng bằng hàm tạo đối tượng được đưa ra dưới đây

Kiểm tra nó ngay bây giờ

Đầu ra của ví dụ trên

Định nghĩa phương thức trong JavaScript Object

Chúng ta có thể định nghĩa phương thức trong đối tượng JavaScript. Nhưng trước khi định nghĩa phương thức, chúng ta cần thêm thuộc tính vào hàm có cùng tên với phương thức

Các đối tượng có thể được sử dụng theo nhiều cách khác nhau trong JavaScript. Có một số cách khác nhau để nhập chúng để hỗ trợ tất cả các trường hợp sử dụng khác nhau

Trong Flow, có hai loại đối tượng khác nhau. loại đối tượng chính xác và loại đối tượng không chính xác

Nói chung, chúng tôi khuyên bạn nên sử dụng bất cứ khi nào có thể. Các loại đối tượng chính xác chính xác hơn và tương tác tốt hơn với các tính năng hệ thống loại khác, như chênh lệch

Cú pháp kiểu đối tượng

Các loại đối tượng cố gắng khớp với cú pháp của các đối tượng trong JavaScript càng nhiều càng tốt. Sử dụng dấu ngoặc nhọn

1// @flow2var obj: { foo?: boolean } = {};3
4obj.foo = true;    // Works!5// $ExpectError6obj.foo = 'hello'; // Error!

1 và cặp tên-giá trị sử dụng dấu hai chấm
1// @flow2var obj: { foo?: boolean } = {};3
4obj.foo = true;    // Works!5// $ExpectError6obj.foo = 'hello'; // Error!

2 được phân tách bằng dấu phẩy
1// @flow2var obj: { foo?: boolean } = {};3
4obj.foo = true;    // Works!5// $ExpectError6obj.foo = 'hello'; // Error!

3

1// @flow2var obj1: { foo: boolean } = { foo: true };3var obj2: {4  foo: number,5  bar: boolean,6  baz: string,7} = {8  foo: 1,9  bar: true,10  baz: 'three',11};
Bản sao

Ghi chú. Các loại đối tượng trước đây đã sử dụng dấu chấm phẩy

1// @flow2var obj: { foo?: boolean } = {};3
4obj.foo = true;    // Works!5// $ExpectError6obj.foo = 'hello'; // Error!

4 để phân tách các cặp tên-giá trị. Trong khi cú pháp vẫn hợp lệ, bạn nên sử dụng dấu phẩy
1// @flow2var obj: { foo?: boolean } = {};3
4obj.foo = true;    // Works!5// $ExpectError6obj.foo = 'hello'; // Error!

3

Thuộc tính loại đối tượng tùy chọn

Trong JavaScript, việc truy cập một thuộc tính không tồn tại có giá trị là

1// @flow2var obj: { foo?: boolean } = {};3
4obj.foo = true;    // Works!5// $ExpectError6obj.foo = 'hello'; // Error!

6. Đây là một nguồn lỗi phổ biến trong các chương trình JavaScript, vì vậy, Flow biến những lỗi này thành lỗi loại

1// @flow2var obj = { foo: "bar" };3// $ExpectError4obj.bar; // Error!

Bản sao_______8_______

Nếu bạn có một đối tượng đôi khi không có thuộc tính, bạn có thể biến nó thành thuộc tính tùy chọn bằng cách thêm dấu chấm hỏi

1// @flow2var obj: { foo?: boolean } = {};3
4obj.foo = true;    // Works!5// $ExpectError6obj.foo = 'hello'; // Error!

7 sau tên thuộc tính trong loại đối tượng

1// @flow2var obj: { foo?: boolean } = {};3
4obj.foo = true;    // Works!5// $ExpectError6obj.foo = 'hello'; // Error!

Bản sao_______11_______

Ngoài loại giá trị đã đặt của chúng, các thuộc tính tùy chọn này có thể là

1// @flow2var obj: { foo?: boolean } = {};3
4obj.foo = true;    // Works!5// $ExpectError6obj.foo = 'hello'; // Error!

8 hoặc bỏ qua hoàn toàn. Tuy nhiên, chúng không thể là
1// @flow2var obj: { foo?: boolean } = {};3
4obj.foo = true;    // Works!5// $ExpectError6obj.foo = 'hello'; // Error!

9

1// @flow2function acceptsObject[value: { foo?: string }] {3  // ...4}5
6acceptsObject[{ foo: "bar" }];     // Works!7acceptsObject[{ foo: undefined }]; // Works!8// $ExpectError9acceptsObject[{ foo: null }];      // Error!

10acceptsObject[{}]; // Works!
Bản sao_______15_______

phương pháp đối tượng

Cú pháp phương thức trong các đối tượng có hành vi thời gian chạy giống như thuộc tính hàm. Hai đối tượng này tương đương trong thời gian chạy

1// @flow2let a = {3  foo : function [] { return 3; }4};5let b = {6  foo[] { return 3; }7}
Bản sao

Tuy nhiên, bất chấp hành vi thời gian chạy tương đương của chúng, Flow kiểm tra chúng hơi khác một chút. Cụ thể, các thuộc tính đối tượng được viết bằng cú pháp phương thức là chỉ đọc;

1// @flow2let b = {3  foo[] { return 3; }4}5b.foo = [] => { return 2; } // Error!

Bản sao_______18_______

Ngoài ra, các phương thức đối tượng không cho phép sử dụng

6:11-6:17: Cannot assign `'hello'` to `obj.foo` because string [1] is incompatible with boolean [2]. [incompatible-type]

0 trong phần thân của chúng, để đảm bảo hành vi đơn giản cho các tham số

6:11-6:17: Cannot assign `'hello'` to `obj.foo` because string [1] is incompatible with boolean [2]. [incompatible-type]

0 của chúng. Thích tham chiếu đối tượng theo tên thay vì sử dụng

6:11-6:17: Cannot assign `'hello'` to `obj.foo` because string [1] is incompatible with boolean [2]. [incompatible-type]

0

1// @flow2var obj = { foo: "bar" };3// $ExpectError4obj.bar; // Error!

0Bản sao_______7_______1

Loại đối tượng suy luận

GHI CHÚ. Hành vi của các đối tượng trống bằng chữ đã thay đổi kể từ phiên bản 0. 191 - xem bài đăng trên blog này để biết thêm chi tiết

Khi bạn tạo một giá trị đối tượng, loại của nó được đặt tại điểm tạo. Bạn không thể thêm thuộc tính mới hoặc sửa đổi loại thuộc tính hiện có

1// @flow2var obj = { foo: "bar" };3// $ExpectError4obj.bar; // Error!

2Bản sao_______7_______3

Nếu bạn cung cấp chú thích, bạn có thể thêm các thuộc tính bị thiếu trong giá trị đối tượng làm thuộc tính tùy chọn

1// @flow2var obj = { foo: "bar" };3// $ExpectError4obj.bar; // Error!

4Bản sao

Bạn cũng có thể cung cấp loại rộng hơn cho một thuộc tính cụ thể

1// @flow2var obj = { foo: "bar" };3// $ExpectError4obj.bar; // Error!

5Bản sao

Đối tượng trống có thể được hiểu là một , nếu bạn cung cấp chú thích thích hợp

1// @flow2var obj = { foo: "bar" };3// $ExpectError4obj.bar; // Error!

6Bản sao

Các loại đối tượng chính xác

Trong Flow, việc chuyển một đối tượng có các thuộc tính bổ sung trong đó loại đối tượng bình thường được mong đợi là an toàn

1// @flow2var obj = { foo: "bar" };3// $ExpectError4obj.bar; // Error!

7Bản sao

Ghi chú. Điều này là do "phân loại chiều rộng"

Đôi khi sẽ hữu ích khi vô hiệu hóa hành vi này và chỉ cho phép một bộ thuộc tính cụ thể. Đối với điều này, Flow hỗ trợ các loại đối tượng "chính xác"

1// @flow2var obj = { foo: "bar" };3// $ExpectError4obj.bar; // Error!

8

Bạn có thể biểu thị các loại đối tượng chính xác bằng cách thêm một cặp "thanh dọc" hoặc "đường ống" vào bên trong dấu ngoặc nhọn. Nếu bạn muốn đặt chúng làm mặc định khi viết các loại đối tượng, bạn có thể thêm vào

6:11-6:17: Cannot assign `'hello'` to `obj.foo` because string [1] is incompatible with boolean [2]. [incompatible-type]

4 tùy chọn của mình

Không giống như các loại đối tượng thông thường, việc chuyển một đối tượng có thuộc tính "phụ" sang một loại đối tượng chính xác là không hợp lệ

1// @flow2var obj = { foo: "bar" };3// $ExpectError4obj.bar; // Error!

9Bản sao_______8_______0

Giao lộ của các loại đối tượng chính xác có thể không hoạt động như bạn mong đợi. Nếu bạn cần kết hợp các loại đối tượng chính xác, hãy sử dụng loại đối tượng trải rộng

4:5-4:7: Cannot get `obj.bar` because property `bar` is missing in object literal [1]. [prop-missing]

1Bản sao_______8_______2

Loại đối tượng không chính xác rõ ràng

Ngoài cú pháp

1// @flow2var obj: { foo?: boolean } = {};3
4obj.foo = true;    // Works!5// $ExpectError6obj.foo = 'hello'; // Error!

1 mặc định, bạn có thể chỉ rõ một đối tượng không chính xác bằng cách sử dụng dấu chấm lửng ở cuối danh sách thuộc tính của mình

4:5-4:7: Cannot get `obj.bar` because property `bar` is missing in object literal [1]. [prop-missing]

3Bản sao

Flow đang lên kế hoạch làm cho các loại đối tượng trở nên chính xác theo mặc định. Điều này có sẵn thông qua một. Bạn cũng có thể đọc hướng dẫn nâng cấp của chúng tôi để biết các bước kích hoạt tùy chọn này trong dự án của riêng bạn

Trong một dự án sử dụng cú pháp chính xác theo mặc định, cú pháp loại đối tượng không chính xác rõ ràng là cách duy nhất để thể hiện một loại đối tượng không chính xác

Các đối tượng như bản đồ

Các phiên bản mới hơn của tiêu chuẩn JavaScript bao gồm một lớp

6:11-6:17: Cannot assign `'hello'` to `obj.foo` because string [1] is incompatible with boolean [2]. [incompatible-type]

6, nhưng việc sử dụng các đối tượng làm bản đồ vẫn rất phổ biến. Trong trường hợp sử dụng này, một đối tượng có thể sẽ có các thuộc tính được thêm vào và được truy xuất trong suốt vòng đời của nó. Hơn nữa, các khóa thuộc tính thậm chí có thể không được biết một cách tĩnh, do đó, việc viết ra một chú thích loại sẽ không thể thực hiện được

Đối với các đối tượng như thế này, Flow cung cấp một loại thuộc tính đặc biệt, được gọi là "thuộc tính bộ chỉ mục. " Thuộc tính bộ chỉ mục cho phép đọc và ghi bằng bất kỳ khóa nào khớp với loại khóa của bộ chỉ mục

4:5-4:7: Cannot get `obj.bar` because property `bar` is missing in object literal [1]. [prop-missing]

4Bản sao

Một bộ chỉ mục có thể được đặt tên tùy chọn, cho mục đích tài liệu

4:5-4:7: Cannot get `obj.bar` because property `bar` is missing in object literal [1]. [prop-missing]

5Bản sao

Khi một loại đối tượng có thuộc tính bộ chỉ mục, các truy cập thuộc tính được coi là có loại được chú thích, ngay cả khi đối tượng không có giá trị trong vị trí đó khi chạy. Người lập trình có trách nhiệm đảm bảo truy cập an toàn, như với mảng

4:5-4:7: Cannot get `obj.bar` because property `bar` is missing in object literal [1]. [prop-missing]

6Bản sao

Các thuộc tính của bộ chỉ mục có thể được trộn lẫn với các thuộc tính được đặt tên

4:5-4:7: Cannot get `obj.bar` because property `bar` is missing in object literal [1]. [prop-missing]

7Bản sao

6:11-6:17: Cannot assign `'hello'` to `obj.foo` because string [1] is incompatible with boolean [2]. [incompatible-type]

7 Loại

GHI CHÚ. Đối với mã mới, hãy ưu tiên

6:11-6:17: Cannot assign `'hello'` to `obj.foo` because string [1] is incompatible with boolean [2]. [incompatible-type]

8 hoặc

6:11-6:17: Cannot assign `'hello'` to `obj.foo` because string [1] is incompatible with boolean [2]. [incompatible-type]

9.

6:11-6:17: Cannot assign `'hello'` to `obj.foo` because string [1] is incompatible with boolean [2]. [incompatible-type]

7 là bí danh của

6:11-6:17: Cannot assign `'hello'` to `obj.foo` because string [1] is incompatible with boolean [2]. [incompatible-type]

8 và sẽ không được dùng nữa cũng như bị xóa trong phiên bản tương lai của Flow

Đôi khi sẽ rất hữu ích khi viết các loại chấp nhận các đối tượng tùy ý, đối với những loại bạn nên viết

1// @flow2var obj: { foo?: boolean } = {};3
4obj.foo = true;    // Works!5// $ExpectError6obj.foo = 'hello'; // Error!

1 như thế này

4:5-4:7: Cannot get `obj.bar` because property `bar` is missing in object literal [1]. [prop-missing]

8

Tuy nhiên, nếu bạn cần chọn không tham gia trình kiểm tra loại và không muốn chuyển đến

6:11-6:17: Cannot assign `'hello'` to `obj.foo` because string [1] is incompatible with boolean [2]. [incompatible-type]

8, bạn có thể sử dụng

6:11-6:17: Cannot assign `'hello'` to `obj.foo` because string [1] is incompatible with boolean [2]. [incompatible-type]

9. [Lưu ý rằng

6:11-6:17: Cannot assign `'hello'` to `obj.foo` because string [1] is incompatible with boolean [2]. [incompatible-type]

8 không an toàn và nên tránh]. Vì lý do lịch sử, từ khóa

6:11-6:17: Cannot assign `'hello'` to `obj.foo` because string [1] is incompatible with boolean [2]. [incompatible-type]

7 vẫn còn. Trong các phiên bản trước của Flow,

6:11-6:17: Cannot assign `'hello'` to `obj.foo` because string [1] is incompatible with boolean [2]. [incompatible-type]

7 giống như

6:11-6:17: Cannot assign `'hello'` to `obj.foo` because string [1] is incompatible with boolean [2]. [incompatible-type]

9

Loại đối tượng có nghĩa là gì?

Một loại đối tượng là kiểu dữ liệu hỗn hợp do người dùng định nghĩa bao bọc một cấu trúc dữ liệu cùng với các chức năng và thủ tục cần thiết để thao tác dữ liệu . Các biến tạo thành cấu trúc dữ liệu được gọi là thuộc tính.

Làm cách nào để lấy loại đối tượng trong JavaScript?

Sử dụng toán tử typeof để lấy loại đối tượng hoặc biến trong JavaScript. Toán tử typeof cũng trả về loại đối tượng được tạo bằng từ khóa "new". Như bạn có thể thấy trong ví dụ trên, toán tử typeof trả về các kiểu khác nhau cho một chuỗi ký tự và một đối tượng chuỗi.

đối tượng trong bản thảo là gì?

Trong TypeScript, đối tượng là loại của tất cả các giá trị không nguyên thủy [giá trị nguyên thủy là undefined , null , booleans, numbers, bigints, . Với loại này, chúng tôi không thể truy cập bất kỳ thuộc tính nào của giá trị.

Đối tượng đối tượng trong JavaScript là gì?

[Đối tượng đối tượng] là phiên bản chuỗi của một thể hiện đối tượng . Giá trị này được chương trình JavaScript trả về nếu bạn cố gắng in ra một đối tượng mà không định dạng đối tượng đó dưới dạng chuỗi trước tiên. Đây là cú pháp cho đối tượng [object Object]. [đối tượng Đối tượng]

Chủ Đề