Hướng dẫn is object a value type in javascript? - đối tượng có phải là một kiểu giá trị trong javascript không?

Đây là phần hai của một loạt bắt đầu với một lịch sử ngắn gọn về JavaScript.

Chỉ có hai điều cơ bản cho JavaScript: các đối tượng và chức năng.

Hiểu các đối tượng và chức năng và bạn hiểu JavaScript.

Các chức năng trong JavaScript là đối tượng. Infact, mọi thứ trong JavaScript là một đối tượng. Tuy nhiên, ngôn ngữ này chứa các loại tối ưu hóa loại cụ thể được gọi là các loại giá trị có ngữ nghĩa khác nhau. Điều này là cả vì lý do hiệu suất, và bởi vì mọi người mong đợi các loại giá trị trực quan sẽ hành xử theo một cách cụ thể.

Các loại giá trị là số, ký hiệu, boolean, null và không xác định. Chuỗi cũng là một loại giá trị mặc dù nó được thực hiện với một hành vi hơi khác để lưu bộ nhớ.

Ngoài biểu tượng, tất cả đều có cú pháp theo nghĩa đen. tức là bạn có thể theo nghĩa đen của người Viking, hãy viết chúng vào chương trình của bạn.

var a = 1; // the literal value 1 is copied into the memory address labelled ‘a’

Các loại giá trị có ngữ nghĩa sao chép.

Các loại
var a = 1;
var b = a;
a = 2;
b === 1; // true: the value 1 was copied into the memory behind b
Value có ngữ nghĩa truyền qua giá trị.

Đây chính xác là hành vi mà chúng ta mong đợi (và đây là lý do tại sao nó hành xử theo cách này). Tương tự như vậy cho Booleans.

Bản vẽ ghi chú Post-It ở đây đại diện cho môi trường từ vựng có mặt sau khi chạy mã bên dưới nó. Ở đây, hai biến được thêm vào môi trường từ vựng; A và B. Các giá trị của chúng được lưu trữ cùng với định nghĩa của chúng trong môi trường từ vựng trong ánh xạ cặp chính. Môi trường từ vựng có nghĩa là bối cảnh được xác định bởi phạm vi kèm theo, về mặt mã được viết.

NULL và không xác định đại diện cho các giá trị trống. Null được dự định để đại diện cho sự vắng mặt do người dùng xác định một cái gì đó. Không xác định là một giá trị đặc biệt cho thấy sự vắng mặt của bất cứ điều gì. NULL cũng được sử dụng làm đỉnh của tất cả các chuỗi kế thừa đối tượng.

Các biến không được chỉ định là không xác định.

Nếu một biến được khai báo và không được khởi tạo, nó có giá trị không xác định.

Chuỗi là các loại giá trị đặc biệt vì các mối quan tâm bộ nhớ duy nhất liên quan đến chuỗi (chúng có thể dài như bạn muốn!).

Các chuỗi có thể được coi là loại giá trị, nhưng với sự khác biệt tinh tế mà việc gán sẽ không sao chép toàn bộ giá trị. Thay vào đó, việc triển khai sẽ sao chép một tham chiếu đến một biểu diễn duy nhất của chuỗi được duy trì bên trong.

Đối tượng là loại tham chiếu. Các đối tượng có một ngữ nghĩa tài liệu tham khảo theo bản sao.

Đối tượng có thể được khai báo theo hai cách:

var o = new Object();

hoặc

var o = {};

Cả hai điều trên là tương đương. Cái sau được gọi là cú pháp theo nghĩa đen của đối tượng.

Các đối tượng có ngữ nghĩa truyền qua từng giá trị.

Các ngữ nghĩa được sao chép bằng cách sao chép có nghĩa là các tham chiếu đến các đối tượng được truyền xung quanh thay vì chính các đối tượng. Đây là vì lý do hiệu suất, ngoài những gì hầu hết các nhà phát triển mong đợi.

Tôi đã đề cập trước đó rằng mọi thứ là một đối tượng. Đây là quy tắc khái niệm, được kích hoạt bởi một tính năng im lặng của JavaScript có tên là Auto-Boxing.

Tự động đóng hộp là quyền anh, hoặc gói, các loại giá trị trong các đối tượng khi chúng được đối xử như các đối tượng. Đằng sau hậu trường, một đối tượng tạm thời được tạo trong suốt thời gian sử dụng thể hiện loại giá trị.

Ví dụ:

2.0.toString(); // 2.0 is boxed automatically so that the toString method can be invoked.

Theo cách này, mọi thứ trong JavaScript, bao gồm các loại giá trị, có thể được cho là một đối tượng (ngoài các loại tương ứng với sự vắng mặt của bất cứ điều gì).

Một số người nói rằng JavaScript không theo định hướng đối tượng. Ngược lại, như chúng ta đã thấy, hoàn toàn theo nghĩa đen mọi thứ trong ngôn ngữ là một đối tượng.

Các loại đối tượng quan trọng khác là các chức năng. Bạn tuyên bố một chức năng như vậy:

function functionName() {  // This is a "function declaration".
// Do something…
}

Bạn cũng có thể định nghĩa các hàm là biểu thức (biểu thức chức năng), ví dụ:

var x = function() {};

Ngoài ra: Về mặt kỹ thuật là một câu lệnh biểu thức chứa biểu thức chức năng trong biểu thức gán.

Ngoài ra còn có trường hợp lạ của các câu lệnh. Chúng được định nghĩa trong JavaScript là các hàm được khai báo bên trong các khối. Những điều này không bao giờ được hỗ trợ trong tiêu chuẩn, nhưng các nhà cung cấp trình duyệt đã thực hiện lịch sử các triển khai không tương thích của riêng họ.

if(true) {
function f() { // A function statement.
// Do something…
}
}

Vì lý do này, các câu lệnh chức năng không nên được sử dụng trong ES5 trở xuống.

Lưu ý: ES6 không xác định hành vi tiêu chuẩn cho các câu lệnh chức năng, các chi tiết nằm ngoài phạm vi của tài liệu này.

Các hàm là đối tượng (hãy nhớ, mọi thứ là một đối tượng). Và điều này rất mạnh mẽ: Điều này có nghĩa là các chức năng có thể được trả về từ các chức năng và được chuyển vào các chức năng như là đối số. Chúng tôi nói rằng các chức năng là các công dân ngôn ngữ hạng nhất của người Viking trong JavaScript.

Tuyên bố một chức năng có thể được coi là (1) khi mới đưa ra một ví dụ về đối tượng hàm đằng sau hậu trường.

var f = new Function('console.log("foo");');

(1) Đối với mục đích giới thiệu, giải thích. Có sự khác biệt trong thực tế.

Bên cạnh đó, đối với những người có một chút kiến ​​thức, chức năng mới sẽ chạy mã kèm theo trong phạm vi toàn cầu. Eval có phạm vi địa phương. SetTimeout là một chức năng khởi tạo.global scope. Eval takes the local scope. setTimeout is an obfuscated Function instantiation.

Chức năng xác định phạm vi trong JavaScript.

if(true) {
var x = 1;
}
console.log(x); // 1 because functions define scope!

Trên đây là tương đương với:

var a = 1;
var b = a;
a = 2;
b === 1; // true: the value 1 was copied into the memory behind b
0

Trong Ecmascript 6 có các loại khai báo biến bổ sung với phạm vi khối: LET và const.

var a = 1;
var b = a;
a = 2;
b === 1; // true: the value 1 was copied into the memory behind b
1

Phạm vi rất quan trọng để hiểu vì nó chi phối việc sử dụng lại các tên biến và được sử dụng bởi người thu gom rác để xác định khi nào một cái gì đó không thể truy cập và đủ điều kiện để thu thập.

Bản tóm tắt

JavaScript chỉ có hai đối tượng và chức năng quan trọng. Tất cả mọi thứ là một đối tượng trong JavaScript và điều này làm cho nó rất nhiều ngôn ngữ hướng đối tượng.

Các loại giá trị là một tối ưu hóa để cho phép hiệu suất tốt hơn và ngữ nghĩa ít bảo hiểm hơn cho các số, booleans và chuỗi.

Phạm vi trong JavaScript được xác định bởi các hàm, mặc dù trong ECMAscript 6 sắp tới, các khối sẽ cung cấp phạm vi cho một số loại khai báo biến.

Sê -ri này tiếp tục với các loại do người dùng xác định và nâng trong JavaScript.

Tên tôi là Ben Aston và cảm ơn bạn đã đọc bài viết của tôi hôm nay. Tôi là một chuyên gia tư vấn JavaScript có trụ sở tại London, có sẵn để tư vấn ngắn hạn trên toàn cầu. Tôi có thể được liên hệ tại.

Nếu bạn muốn phát triển hơn nữa kiến ​​thức về JavaScript, bạn có thể quan tâm đến khóa đào tạo thực hành của tôi. Chi tiết đầy đủ có thể được tìm thấy trực tuyến tại www.learnjavascript.london.

Nếu bạn thích tác phẩm này, xin vui lòng cho tôi biết bằng cách nhấp vào nút Đề xuất trên mạng bên dưới.

Bạn cũng có thể quan tâm đến bài viết của tôi về việc đóng cửa trong JavaScript.

Được sản xuất tại Vương quốc Anh

Đối tượng có phải là loại giá trị không?

Một biến đối tượng luôn là loại tham chiếu.Các lớp và chuỗi là loại tham chiếu.Struct và enum là loại loại giá trị.. Classes and string are reference type. Struct and enum are kind of value types.

Là các giá trị đối tượng trong JavaScript?

Đối tượng JavaScript là các thùng chứa cho các giá trị được đặt tên được gọi là thuộc tính..

Là loại giá trị đối tượng hoặc loại tham chiếu?

Đối tượng là một ví dụ về loại tham chiếu.Trong ví dụ trên, cả hai biến A và B sẽ trỏ đến cùng một đối tượng học sinh trong bộ nhớ.Nếu chúng ta thay đổi A, chúng ta cũng sẽ thay đổi b.Điều này là do A và B không lưu trữ dữ liệu mà là một tham chiếu đến vị trí lưu trữ dữ liệu.reference type. In the above example, both variables a and b will point to the same student object in memory. If we change a , we will also change b . This is because a and b are not storing the data but a reference to the location where the data is stored.

Đối tượng có phải là loại trong JavaScript không?

Một loại đối tượng chỉ đơn giản là một tập hợp các thuộc tính dưới dạng tên và các cặp giá trị.Thông báo từ danh sách rằng NULL và không xác định là các loại dữ liệu JavaScript nguyên thủy, mỗi loại là một loại dữ liệu chỉ chứa một giá trị.. Notice from the list that null and undefined are primitive JavaScript data types, each being a data type containing just one value.