Điều cơ bản
Bạn có thể không biết điều đó, nhưng trong JavaScript, bất cứ khi nào chúng ta tương tác với chuỗi, số hoặc nguyên thủy boolean, chúng ta bước vào một thế giới ẩn của bóng đối tượng và sự ép buộc.
Chuỗi, số, boolean, null, không xác định và ký hiệu.
Trong JavaScript có 7 loại nguyên thủy:
String.prototype.sampleProperty = 5;
var str = "this is a string";
str.sampleProperty; // 5
1, String.prototype.sampleProperty = 5;
var str = "this is a string";
str.sampleProperty; // 5
2, String.prototype.sampleProperty = 5;
var str = "this is a string";
str.sampleProperty; // 5
3, String.prototype.sampleProperty = 5;
var str = "this is a string";
str.sampleProperty; // 5
4, String.prototype.sampleProperty = 5;
var str = "this is a string";
str.sampleProperty; // 5
5, String.prototype.sampleProperty = 5;
var str = "this is a string";
str.sampleProperty; // 5
6 và String.prototype.sampleProperty = 5;
var str = "this is a string";
str.sampleProperty; // 5
7. Mọi thứ khác là một đối tượng. Các loại nguyên thủy String.prototype.sampleProperty = 5;
var str = "this is a string";
str.sampleProperty; // 5
3, String.prototype.sampleProperty = 5;
var str = "this is a string";
str.sampleProperty; // 5
4 và String.prototype.sampleProperty = 5;
var str = "this is a string";
str.sampleProperty; // 5
5 có thể được bao bọc bởi các đối tác đối tượng của chúng. Các đối tượng này là các trường hợp của các hàm tạo var myObj = {lhs: 3, rhs: 2};
var myFunc = function[]{}
var myString = "This is a sample String";
var myNumber = 4;
var myArray = [2, 3, 5];
myObj.toString[]; // "[object Object]"
myFunc.toString[]; // "function[]{}"
myString.toString[]; // "This is a sample String"
myNumber.toString[]; // "4"
myArray.toString[]; // "2,3,5"
1, var myObj = {lhs: 3, rhs: 2};
var myFunc = function[]{}
var myString = "This is a sample String";
var myNumber = 4;
var myArray = [2, 3, 5];
myObj.toString[]; // "[object Object]"
myFunc.toString[]; // "function[]{}"
myString.toString[]; // "This is a sample String"
myNumber.toString[]; // "4"
myArray.toString[]; // "2,3,5"
2 và var myObj = {lhs: 3, rhs: 2};
var myFunc = function[]{}
var myString = "This is a sample String";
var myNumber = 4;
var myArray = [2, 3, 5];
myObj.toString[]; // "[object Object]"
myFunc.toString[]; // "function[]{}"
myString.toString[]; // "This is a sample String"
myNumber.toString[]; // "4"
myArray.toString[]; // "2,3,5"
3 tương ứng.typeof true; //"boolean"
typeof new Boolean[true]; //"object"
typeof "this is a string"; //"string"
typeof new String["this is a string"]; //"object"
typeof 123; //"number"
typeof new Number[123]; //"object"
Nếu nguyên thủy không có thuộc tính, tại sao
var myObj = {lhs: 3, rhs: 2};
var myFunc = function[]{}
var myString = "This is a sample String";
var myNumber = 4;
var myArray = [2, 3, 5];
myObj.toString[]; // "[object Object]"
myFunc.toString[]; // "function[]{}"
myString.toString[]; // "This is a sample String"
myNumber.toString[]; // "4"
myArray.toString[]; // "2,3,5"
4 trả về giá trị?Bởi vì JavaScript sẽ dễ dàng ép buộc giữa các nguyên thủy và đối tượng. Trong trường hợp này, giá trị chuỗi bị ép buộc vào một đối tượng chuỗi để truy cập độ dài thuộc tính. Đối tượng chuỗi chỉ được sử dụng cho một phần thứ hai sau đó nó được hy sinh cho các vị thần của bộ sưu tập rác - nhưng theo tinh thần của các chương trình khám phá truyền hình, chúng ta sẽ bẫy sinh vật khó nắm bắt và bảo tồn nó để phân tích thêm
Để chứng minh điều này, hãy xem xét thêm ví dụ sau đây trong đó chúng tôi đang thêm một thuộc tính mới vào nguyên mẫu Constructor String.
String.prototype.sampleProperty = 5;
var str = "this is a string";
str.sampleProperty; // 5
Điều này có nghĩa là các nguyên thủy có quyền truy cập vào tất cả các thuộc tính [bao gồm các phương thức] được xác định bởi các hàm tạo đối tượng tương ứng của chúng.
Vì vậy, chúng tôi đã thấy rằng các loại nguyên thủy sẽ ép buộc phù hợp với đối tác đối tượng tương ứng của chúng khi được yêu cầu.
Phân tích phương pháp
5var myObj = {lhs: 3, rhs: 2};
var myFunc = function[]{}
var myString = "This is a sample String";
var myNumber = 4;
var myArray = [2, 3, 5];
myObj.toString[]; // "[object Object]"
myFunc.toString[]; // "function[]{}"
myString.toString[]; // "This is a sample String"
myNumber.toString[]; // "4"
myArray.toString[]; // "2,3,5"
Xem xét mã sau
var myObj = {lhs: 3, rhs: 2};
var myFunc = function[]{}
var myString = "This is a sample String";
var myNumber = 4;
var myArray = [2, 3, 5];
myObj.toString[]; // "[object Object]"
myFunc.toString[]; // "function[]{}"
myString.toString[]; // "This is a sample String"
myNumber.toString[]; // "4"
myArray.toString[]; // "2,3,5"
Như đã thảo luận ở trên, những gì thực sự xảy ra là khi chúng ta gọi phương thức
var myObj = {lhs: 3, rhs: 2};
var myFunc = function[]{}
var myString = "This is a sample String";
var myNumber = 4;
var myArray = [2, 3, 5];
myObj.toString[]; // "[object Object]"
myFunc.toString[]; // "function[]{}"
myString.toString[]; // "This is a sample String"
myNumber.toString[]; // "4"
myArray.toString[]; // "2,3,5"
5 theo loại nguyên thủy, nó phải được ép vào đối tác đối tượng của nó trước khi nó có thể gọi phương thức. tức là var myObj = {lhs: 3, rhs: 2};
var myFunc = function[]{}
var myString = "This is a sample String";
var myNumber = 4;
var myArray = [2, 3, 5];
myObj.toString[]; // "[object Object]"
myFunc.toString[]; // "function[]{}"
myString.toString[]; // "This is a sample String"
myNumber.toString[]; // "4"
myArray.toString[]; // "2,3,5"
7 tương đương với var myObj = {lhs: 3, rhs: 2};
var myFunc = function[]{}
var myString = "This is a sample String";
var myNumber = 4;
var myArray = [2, 3, 5];
myObj.toString[]; // "[object Object]"
myFunc.toString[]; // "function[]{}"
myString.toString[]; // "This is a sample String"
myNumber.toString[]; // "4"
myArray.toString[]; // "2,3,5"
8 và tương tự đối với các loại nguyên thủy khác.i.e.
var myObj = {lhs: 3, rhs: 2};
var myFunc = function[]{}
var myString = "This is a sample String";
var myNumber = 4;
var myArray = [2, 3, 5];
myObj.toString[]; // "[object Object]"
myFunc.toString[]; // "function[]{}"
myString.toString[]; // "This is a sample String"
myNumber.toString[]; // "4"
myArray.toString[]; // "2,3,5"
7 is equivalent to var myObj = {lhs: 3, rhs: 2};
var myFunc = function[]{}
var myString = "This is a sample String";
var myNumber = 4;
var myArray = [2, 3, 5];
myObj.toString[]; // "[object Object]"
myFunc.toString[]; // "function[]{}"
myString.toString[]; // "This is a sample String"
myNumber.toString[]; // "4"
myArray.toString[]; // "2,3,5"
8 and similarly for other primitive types.Nhưng điều gì sẽ xảy ra nếu thay vì loại nguyên thủy được chuyển thành phương pháp
var myObj = {lhs: 3, rhs: 2};
var myFunc = function[]{}
var myString = "This is a sample String";
var myNumber = 4;
var myArray = [2, 3, 5];
myObj.toString[]; // "[object Object]"
myFunc.toString[]; // "function[]{}"
myString.toString[]; // "This is a sample String"
myNumber.toString[]; // "4"
myArray.toString[]; // "2,3,5"
5 của đối tác hàm tạo đối tượng tương ứng của nó, chúng tôi buộc loại nguyên thủy được chuyển làm tham số vào phương thức var myObj = {lhs: 3, rhs: 2};
var myFunc = function[]{}
var myString = "This is a sample String";
var myNumber = 4;
var myArray = [2, 3, 5];
myObj.toString[]; // "[object Object]"
myFunc.toString[]; // "function[]{}"
myString.toString[]; // "This is a sample String"
myNumber.toString[]; // "4"
myArray.toString[]; // "2,3,5"
5 của hàm tạo hàm đối tượng [var myObj = {lhs: 3, rhs: 2};
var myFunc = function[]{}
var myString = "This is a sample String";
var myNumber = 4;
var myArray = [2, 3, 5];
var myUndefined = undefined;
var myNull = null;
Object.prototype.toString.call[myObj]; // "[object Object]"
Object.prototype.toString.call[myFunc]; // "[object Function]"
Object.prototype.toString.call[myString]; // "[object String]"
Object.prototype.toString.call[myNumber]; // "[object Number]"
Object.prototype.toString.call[myArray]; // "[object Array]"
Object.prototype.toString.call[myUndefined]; // "[object Undefined]"
Object.prototype.toString.call[myNull]; // "[object Null]"
1]?Nhìn kỹ hơn vào object.prototype.toString []
Theo tài liệu, khi phương thức ToString được gọi, các bước sau đây được thực hiện:
- Nếu giá trị
2 làvar myObj = {lhs: 3, rhs: 2}; var myFunc = function[]{} var myString = "This is a sample String"; var myNumber = 4; var myArray = [2, 3, 5]; var myUndefined = undefined; var myNull = null; Object.prototype.toString.call[myObj]; // "[object Object]" Object.prototype.toString.call[myFunc]; // "[object Function]" Object.prototype.toString.call[myString]; // "[object String]" Object.prototype.toString.call[myNumber]; // "[object Number]" Object.prototype.toString.call[myArray]; // "[object Array]" Object.prototype.toString.call[myUndefined]; // "[object Undefined]" Object.prototype.toString.call[myNull]; // "[object Null]"
1, hãy trả vềString.prototype.sampleProperty = 5; var str = "this is a string"; str.sampleProperty; // 5
4.var myObj = {lhs: 3, rhs: 2}; var myFunc = function[]{} var myString = "This is a sample String"; var myNumber = 4; var myArray = [2, 3, 5]; var myUndefined = undefined; var myNull = null; Object.prototype.toString.call[myObj]; // "[object Object]" Object.prototype.toString.call[myFunc]; // "[object Function]" Object.prototype.toString.call[myString]; // "[object String]" Object.prototype.toString.call[myNumber]; // "[object Number]" Object.prototype.toString.call[myArray]; // "[object Array]" Object.prototype.toString.call[myUndefined]; // "[object Undefined]" Object.prototype.toString.call[myNull]; // "[object Null]"
- Nếu giá trị
2 làvar myObj = {lhs: 3, rhs: 2}; var myFunc = function[]{} var myString = "This is a sample String"; var myNumber = 4; var myArray = [2, 3, 5]; var myUndefined = undefined; var myNull = null; Object.prototype.toString.call[myObj]; // "[object Object]" Object.prototype.toString.call[myFunc]; // "[object Function]" Object.prototype.toString.call[myString]; // "[object String]" Object.prototype.toString.call[myNumber]; // "[object Number]" Object.prototype.toString.call[myArray]; // "[object Array]" Object.prototype.toString.call[myUndefined]; // "[object Undefined]" Object.prototype.toString.call[myNull]; // "[object Null]"
2, hãy trả vềString.prototype.sampleProperty = 5; var str = "this is a string"; str.sampleProperty; // 5
7.var myObj = {lhs: 3, rhs: 2}; var myFunc = function[]{} var myString = "This is a sample String"; var myNumber = 4; var myArray = [2, 3, 5]; var myUndefined = undefined; var myNull = null; Object.prototype.toString.call[myObj]; // "[object Object]" Object.prototype.toString.call[myFunc]; // "[object Function]" Object.prototype.toString.call[myString]; // "[object String]" Object.prototype.toString.call[myNumber]; // "[object Number]" Object.prototype.toString.call[myArray]; // "[object Array]" Object.prototype.toString.call[myUndefined]; // "[object Undefined]" Object.prototype.toString.call[myNull]; // "[object Null]"
- Nếu giá trị này không có giá trị ở trên, hãy để
8 là kết quả của việc gọivar myObj = {lhs: 3, rhs: 2}; var myFunc = function[]{} var myString = "This is a sample String"; var myNumber = 4; var myArray = [2, 3, 5]; var myUndefined = undefined; var myNull = null; Object.prototype.toString.call[myObj]; // "[object Object]" Object.prototype.toString.call[myFunc]; // "[object Function]" Object.prototype.toString.call[myString]; // "[object String]" Object.prototype.toString.call[myNumber]; // "[object Number]" Object.prototype.toString.call[myArray]; // "[object Array]" Object.prototype.toString.call[myUndefined]; // "[object Undefined]" Object.prototype.toString.call[myNull]; // "[object Null]"
9 vượt qua giá trịvar myObj = {lhs: 3, rhs: 2}; var myFunc = function[]{} var myString = "This is a sample String"; var myNumber = 4; var myArray = [2, 3, 5]; var myUndefined = undefined; var myNull = null; Object.prototype.toString.call[myObj]; // "[object Object]" Object.prototype.toString.call[myFunc]; // "[object Function]" Object.prototype.toString.call[myString]; // "[object String]" Object.prototype.toString.call[myNumber]; // "[object Number]" Object.prototype.toString.call[myArray]; // "[object Array]" Object.prototype.toString.call[myUndefined]; // "[object Undefined]" Object.prototype.toString.call[myNull]; // "[object Null]"
2 làm đối số.var myObj = {lhs: 3, rhs: 2}; var myFunc = function[]{} var myString = "This is a sample String"; var myNumber = 4; var myArray = [2, 3, 5]; var myUndefined = undefined; var myNull = null; Object.prototype.toString.call[myObj]; // "[object Object]" Object.prototype.toString.call[myFunc]; // "[object Function]" Object.prototype.toString.call[myString]; // "[object String]" Object.prototype.toString.call[myNumber]; // "[object Number]" Object.prototype.toString.call[myArray]; // "[object Array]" Object.prototype.toString.call[myUndefined]; // "[object Undefined]" Object.prototype.toString.call[myNull]; // "[object Null]"
- Đặt lớp là giá trị của thuộc tính nội bộ
let objA = { name: "christina", degree: "music", instrument: "flute" } alert[objA];1 của8.var myObj = {lhs: 3, rhs: 2}; var myFunc = function[]{} var myString = "This is a sample String"; var myNumber = 4; var myArray = [2, 3, 5]; var myUndefined = undefined; var myNull = null; Object.prototype.toString.call[myObj]; // "[object Object]" Object.prototype.toString.call[myFunc]; // "[object Function]" Object.prototype.toString.call[myString]; // "[object String]" Object.prototype.toString.call[myNumber]; // "[object Number]" Object.prototype.toString.call[myArray]; // "[object Array]" Object.prototype.toString.call[myUndefined]; // "[object Undefined]" Object.prototype.toString.call[myNull]; // "[object Null]"
- Trả về giá trị chuỗi là kết quả của việc kết hợp ba chuỗi
let objA = { name: "christina", degree: "music", instrument: "flute" } alert[objA];3,let objA = { name: "christina", degree: "music", instrument: "flute" } alert[objA];4 vàlet objA = { name: "christina", degree: "music", instrument: "flute" } alert[objA];5.
Hiểu điều này từ ví dụ sau
var myObj = {lhs: 3, rhs: 2};
var myFunc = function[]{}
var myString = "This is a sample String";
var myNumber = 4;
var myArray = [2, 3, 5];
var myUndefined = undefined;
var myNull = null;
Object.prototype.toString.call[myObj]; // "[object Object]"
Object.prototype.toString.call[myFunc]; // "[object Function]"
Object.prototype.toString.call[myString]; // "[object String]"
Object.prototype.toString.call[myNumber]; // "[object Number]"
Object.prototype.toString.call[myArray]; // "[object Array]"
Object.prototype.toString.call[myUndefined]; // "[object Undefined]"
Object.prototype.toString.call[myNull]; // "[object Null]"
Tài liệu tham khảo: //es5.github.io/x15.2.html#x15.2.4.2 //es5.github.io/x9.html#x9.9 //javascriptweblog.wordprogpress.com/ 2010/09/22
[Đối tượng đối tượng] là một biểu diễn chuỗi của một đối tượng. Bạn có thể thấy văn bản này nếu bạn sử dụng ALERT [] để in một đối tượng vào màn hình, ví dụ. Bạn có thể xem nội dung của một đối tượng bằng cách sử dụng Console.log [], JSON.Stringify [] hoặc A for trong vòng lặp.
Khi phát triển bằng cách sử dụng JavaScript, nhiều người trong chúng ta đã gặp phải đầu ra: [đối tượng đối tượng]. Khi tôi nhìn thấy điều này lần đầu tiên, tôi đã đến gặp người cố vấn của mình vào thời điểm đó và hỏi: Điều này thậm chí có nghĩa là gì? Tôi đã nhầm lẫn.
Tìm Bootcamp của bạn phù hợp
- Karma nghề nghiệp phù hợp với bạn với bootcamp công nghệ hàng đầu
- Truy cập các học bổng và khóa học chuẩn bị độc quyền
Chọn mối quan tâm của bạn họ Tên điện thoại Email Tên của bạn
First name
Last name
Email
Phone number
Bằng cách tiếp tục, bạn đồng ý với các điều khoản dịch vụ và chính sách quyền riêng tư của chúng tôi và bạn đồng ý nhận được các ưu đãi và cơ hội từ Karma nghề nghiệp qua điện thoại, tin nhắn văn bản và email.
Bài viết này nhằm cho bạn biết về đầu ra này và ý nghĩa của nó. Chúng tôi sẽ nói về cách bạn có thể dịch [đối tượng đối tượng] thành nội dung có thể đọc được mà bạn có thể làm việc cùng.
JavaScript [đối tượng đối tượng] 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 trả về bởi một chương trình JavaScript nếu bạn cố gắng in ra một đối tượng mà không định dạng đối tượng trước như một chuỗi.
Đây là cú pháp cho đối tượng [đối tượng] đối tượng:
Nó không có gì lạ khi các nhà phát triển bối rối về đối tượng này: không có thông báo lỗi hoặc cảnh báo nào cho chúng ta biết những gì đang xảy ra. Hãy cùng xem một ví dụ về đối tượng này trong hành động.
[Đối tượng đối tượng] Ví dụ về JavaScript
Lấy ví dụ này:
let objA = { name: "christina", degree: "music", instrument: "flute" } alert[objA];
Khi câu lệnh ALERT [] chạy, mã của chúng tôi trả về [Đối tượng đối tượng]. Chương trình của chúng tôi cố gắng trả về một đại diện chuỗi của những gì được chuyển vào phương thức ALERT []. Nhưng, bởi vì mã của chúng tôi coi đây là một đối tượng, nó cho chúng ta biết rằng nó là một thể hiện của một đối tượng thay thế.
Thông báo [đối tượng] không được mô tả lắm. Nhưng, điều này không có nghĩa là chúng ta không thể nhìn thấy các giá trị trong đối tượng của mình. Hãy để nói về những cách mà chúng ta có thể đọc các giá trị trong một đối tượng.
Những gì bên trong đối tượng?
Biết rằng [đối tượng đối tượng] là một thể hiện của một đối tượng là tuyệt vời, nhưng chúng tôi muốn biết là bên trong đối tượng. Có ba cách để làm điều đó:
- Đăng nhập vào Bảng điều khiển với Console.log []
- Xâu chuỗi nó với json.Stringify []
- Sử dụng cho Lọ trong vòng lặp và xem xét từng thuộc tính riêng lẻ
Đăng nhập vào bảng điều khiển
Có thể cho rằng cách dễ nhất để xem những gì bên trong một đối tượng là đăng nhập đối tượng vào bảng điều khiển. Câu lệnh Console.log [] cho phép bạn xem tất cả các giá trị trong một đối tượng JavaScript.
Xem xét mã sau:
let objA = { name: "christina", degree: "music", instrument: "flute" } console.log[objA];
Mã của chúng tôi tuyên bố một đối tượng gọi là obja. Sau đó, chúng tôi in ra giá trị của đối tượng vào bảng điều khiển. Mã của chúng tôi trả về:
{ degree: "music", instrument: "flute", name: "christina" }
Chúng ta có thể thấy các giá trị trong đối tượng của chúng ta.
Sử dụng json.Stringify []
Phương thức JSON.Stringify [] chuyển đổi một đối tượng JavaScript thành một chuỗi. Sau đó chúng ta có thể thao tác chuỗi này.
Vì vậy, chúng ta có thể sử dụng json.Stringify [] để chuyển đổi một đối tượng thành một chuỗi. Sau đó, chúng tôi có thể sử dụng ALERT [] để hiển thị giá trị của chuỗi cho người dùng:
let objA = { name: "christina", degree: "music", instrument: "flute" } alert[JSON.stringify[objA]];
Giống như trong ví dụ cuối cùng của chúng tôi, chúng tôi đã xác định một đối tượng gọi là Obja. Sau đó, chúng tôi sử dụng phương thức json.Stringify [] để chuyển đổi đối tượng thành một chuỗi. Sau đó, chúng tôi sử dụng cảnh báo để hiển thị giá trị của chuỗi vào bảng điều khiển.
Mã của chúng tôi mở một hộp nhắc nhở với các nội dung sau:
{"name":"christina","degree":"music","instrument":"flute"}
Sử dụng một cho… trong vòng lặp
JavaScript cho Vòng lặp trong vòng lặp cho phép chúng ta lặp lại nội dung của một đối tượng. Chúng ta có thể sử dụng vòng lặp này để in ra từng cặp giá trị khóa riêng lẻ.
Xem xét mã sau:
let objA = { name: "christina", degree: "music", instrument: "flute" } for[let key in objA] { console.log[key + ":", objA[key]]; }
Mã của chúng tôi tuyên bố một đối tượng gọi là obja. Sau đó, chúng tôi in ra giá trị của đối tượng vào bảng điều khiển. Mã của chúng tôi trả về:
Chúng ta có thể thấy các giá trị trong đối tượng của chúng ta.
String.prototype.sampleProperty = 5;
var str = "this is a string";
str.sampleProperty; // 5
0Sử dụng json.Stringify []
Phương thức JSON.Stringify [] chuyển đổi một đối tượng JavaScript thành một chuỗi. Sau đó chúng ta có thể thao tác chuỗi này.
Vì vậy, chúng ta có thể sử dụng json.Stringify [] để chuyển đổi một đối tượng thành một chuỗi. Sau đó, chúng tôi có thể sử dụng ALERT [] để hiển thị giá trị của chuỗi cho người dùng:
Bạn có muốn tìm hiểu thêm về JavaScript? Kiểm tra đầy đủ của chúng tôi Cách học Hướng dẫn JavaScript để được tư vấn về các tài nguyên học tập hàng đầu và các khóa học trực tuyến.