Tóm lược. trong hướng dẫn này, bạn sẽ học cách chuyển đổi một đối tượng thành một mảng bằng cách sử dụng các phương thức của Object
Để chuyển đổi một đối tượng thành một mảng, bạn sử dụng một trong ba phương thức.
84,Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
85 vàCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
86Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Lưu ý rằng phương pháp
84 đã có sẵn kể từ ECMAScript 2015 hoặc ES6 vàCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
85 vàCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
86 đã có sẵn kể từ ECMAScript 2017Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Giả sử rằng bạn có một đối tượng
3 như sauCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Code language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
Để chuyển đổi tên thuộc tính của đối tượng
3 thành một mảng, bạn sử dụng phương thứcCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
84Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
đầu ra
Code language: JSON / JSON with Comments [json]
[ 'firstName', 'lastName' ]
Để chuyển đổi các giá trị thuộc tính của đối tượng
3 thành một mảng, bạn sử dụng phương thứcCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
85Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Code language: JavaScript [javascript]
const propertyValues = Object.values[person]; console.log[propertyValues];
đầu ra
Code language: JSON / JSON with Comments [json]
[ 'John', 'Doe' ]
Để chuyển đổi vô số thuộc tính khóa chuỗi của một đối tượng thành một mảng, bạn sử dụng phương thức
86. Ví dụCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Tôi đã hai lần được hỏi, ‘Hãy cầu nguyện, ông. Babbage, nếu bạn đưa vào máy những con số sai, liệu câu trả lời đúng có xuất hiện không?’ [. ] Tôi không thể hiểu đúng loại ý tưởng lộn xộn có thể gây ra một câu hỏi như vậy
Charles Babbage, Passages from the Life of a Philosopher [1864]Số, Booleans và chuỗi là các nguyên tử mà cấu trúc dữ liệu được xây dựng từ. Nhiều loại thông tin yêu cầu nhiều hơn một nguyên tử, mặc dù. Các đối tượng cho phép chúng ta nhóm các giá trị—bao gồm cả các đối tượng khác—để xây dựng các cấu trúc phức tạp hơn
Các chương trình chúng tôi đã xây dựng cho đến nay đã bị giới hạn bởi thực tế là chúng chỉ hoạt động trên các loại dữ liệu đơn giản. Chương này sẽ giới thiệu các cấu trúc dữ liệu cơ bản. Khi kết thúc, bạn sẽ biết đủ để bắt đầu viết các chương trình hữu ích
Chương này sẽ làm việc thông qua một ví dụ lập trình ít nhiều thực tế, giới thiệu các khái niệm khi chúng áp dụng cho vấn đề hiện tại. Mã ví dụ thường sẽ được xây dựng dựa trên các chức năng và ràng buộc đã được giới thiệu trước đó trong văn bản
con sóc
Thỉnh thoảng, thường là từ 8 giờ tối. m. và 10p. m. , Jacques thấy mình biến thành một loài gặm nhấm lông nhỏ với cái đuôi rậm rạp
Một mặt, Jacques khá vui vì anh ấy không có lycanthropy cổ điển. Biến thành sóc gây ra ít vấn đề hơn biến thành sói. Thay vì phải lo lắng về việc vô tình ăn thịt con hàng xóm [điều đó sẽ rất khó xử], anh ta lo lắng về việc bị con mèo của hàng xóm ăn thịt. Sau hai lần thức dậy trên một cành cây mỏng bấp bênh trên tán cây sồi, trần truồng và mất phương hướng, anh ấy đã khóa cửa ra vào và cửa sổ phòng mình vào ban đêm và đặt một vài quả óc chó trên sàn để giữ cho mình bận rộn.
Điều đó giải quyết các vấn đề về mèo và cây cối. Nhưng Jacques muốn loại bỏ hoàn toàn tình trạng của mình. Sự xuất hiện bất thường của sự biến đổi khiến anh ta nghi ngờ rằng chúng có thể được kích hoạt bởi thứ gì đó. Trong một thời gian, anh tin rằng điều đó chỉ xảy ra vào những ngày anh ở gần những cây sồi. Nhưng tránh cây sồi không ngăn được vấn đề
Chuyển sang một cách tiếp cận khoa học hơn, Jacques đã bắt đầu ghi nhật ký hàng ngày về mọi thứ anh ấy làm trong một ngày nhất định và liệu anh ấy có thay đổi hình thức hay không. Với dữ liệu này, anh ấy hy vọng sẽ thu hẹp các điều kiện kích hoạt các biến đổi
Điều đầu tiên anh ta cần là một cấu trúc dữ liệu để lưu trữ thông tin này
tập dữ liệu
Để làm việc với một đoạn dữ liệu kỹ thuật số, trước tiên chúng ta phải tìm cách thể hiện nó trong bộ nhớ của máy. Ví dụ: giả sử chúng ta muốn biểu diễn tập hợp các số 2, 3, 5, 7 và 11
Chúng ta có thể sáng tạo với các chuỗi—xét cho cùng, các chuỗi có thể có độ dài bất kỳ, vì vậy chúng ta có thể đưa nhiều dữ liệu vào chúng—và sử dụng
let descriptions = { work: "Went to work", "touched tree": "Touched a tree" };2 làm đại diện của chúng ta. Nhưng điều này thật khó xử. Bạn phải bằng cách nào đó trích xuất các chữ số và chuyển đổi chúng trở lại số để truy cập chúng
May mắn thay, JavaScript cung cấp một kiểu dữ liệu đặc biệt để lưu trữ các chuỗi giá trị. Nó được gọi là một mảng và được viết dưới dạng danh sách các giá trị nằm giữa các dấu ngoặc vuông, được phân tách bằng dấu phẩy
let listOfNumbers = [2, 3, 5, 7, 11]; console.log[listOfNumbers[2]]; // → 5 console.log[listOfNumbers[0]]; // → 2 console.log[listOfNumbers[2 - 1]]; // → 3
Ký hiệu để lấy các phần tử bên trong một mảng cũng sử dụng dấu ngoặc vuông. Một cặp dấu ngoặc vuông ngay sau một biểu thức, với một biểu thức khác bên trong chúng, sẽ tra cứu phần tử trong biểu thức bên trái tương ứng với chỉ số được đưa ra bởi biểu thức trong ngoặc
Chỉ số đầu tiên của một mảng là 0, không phải là một. Vì vậy, phần tử đầu tiên được truy xuất bằng
let descriptions = { work: "Went to work", "touched tree": "Touched a tree" };3. Việc đếm dựa trên số 0 có một truyền thống lâu đời trong công nghệ và theo một số cách nhất định rất có ý nghĩa, nhưng phải mất một thời gian để làm quen. Hãy coi chỉ mục là số lượng mục cần bỏ qua, tính từ đầu mảng
Tính chất
Chúng ta đã thấy một vài biểu thức trông đáng ngờ như
let descriptions = { work: "Went to work", "touched tree": "Touched a tree" };4 [để lấy độ dài của một chuỗi] và
let descriptions = { work: "Went to work", "touched tree": "Touched a tree" };5 [hàm tối đa] trong các chương trước. Đây là những biểu thức truy cập một thuộc tính của một số giá trị. Trong trường hợp đầu tiên, chúng tôi truy cập thuộc tính
let descriptions = { work: "Went to work", "touched tree": "Touched a tree" };6 của giá trị trong
let descriptions = { work: "Went to work", "touched tree": "Touched a tree" };7. Trong cách thứ hai, chúng ta truy cập thuộc tính có tên
let descriptions = { work: "Went to work", "touched tree": "Touched a tree" };8 trong đối tượng
let descriptions = { work: "Went to work", "touched tree": "Touched a tree" };9 [là một tập hợp các hàm và hằng số liên quan đến toán học]
Hầu như tất cả các giá trị JavaScript đều có thuộc tính. Các trường hợp ngoại lệ là
70 vàCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
71. Nếu bạn cố truy cập một thuộc tính trên một trong những giá trị không phải giá trị này, thì bạn sẽ gặp lỗiCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
9Code language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
Hai cách chính để truy cập các thuộc tính trong JavaScript là bằng dấu chấm và bằng dấu ngoặc vuông. Cả
72 vàCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
73 đều truy cập một thuộc tính trênCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
74—nhưng không nhất thiết phải cùng một thuộc tính. Sự khác biệt là cáchCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
75 được giải thích. Khi sử dụng dấu chấm, từ sau dấu chấm là tên theo nghĩa đen của thuộc tính. Khi sử dụng dấu ngoặc vuông, biểu thức giữa các dấu ngoặc được đánh giá để lấy tên thuộc tính. Trong khiCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
72 lấy thuộc tính củaCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
74 có tên là “x”, thìCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
73 cố gắng đánh giá biểu thứcCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
75 và sử dụng kết quả, được chuyển đổi thành một chuỗi, làm tên thuộc tínhCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
Vì vậy, nếu bạn biết thuộc tính mà bạn quan tâm được gọi là màu sắc, bạn nói
80. Nếu bạn muốn trích xuất thuộc tính được đặt tên theo giá trị được giữ trong ràng buộcCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
81, bạn nóiCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
82. Tên thuộc tính là chuỗi. Chúng có thể là bất kỳ chuỗi nào, nhưng ký hiệu dấu chấm chỉ hoạt động với các tên trông giống như tên ràng buộc hợp lệ. Vì vậy, nếu bạn muốn truy cập thuộc tính có tên 2 hoặc John Doe, bạn phải sử dụng dấu ngoặc vuông.Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
83 hoặcCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
84Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Các phần tử trong một mảng được lưu trữ dưới dạng các thuộc tính của mảng, sử dụng các số làm tên thuộc tính. Bởi vì bạn không thể sử dụng ký hiệu dấu chấm với các số và thường muốn sử dụng một liên kết chứa chỉ mục, bạn phải sử dụng ký hiệu dấu ngoặc để truy cập chúng
Thuộc tính
let descriptions = { work: "Went to work", "touched tree": "Touched a tree" };6 của một mảng cho chúng ta biết nó có bao nhiêu phần tử. Tên thuộc tính này là một tên ràng buộc hợp lệ và chúng tôi biết trước tên của nó, vì vậy, để tìm độ dài của một mảng, bạn thường viết
86 vì viết như vậy dễ hơnCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
87Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
phương pháp
Cả giá trị chuỗi và mảng đều chứa, ngoài thuộc tính
let descriptions = { work: "Went to work", "touched tree": "Touched a tree" };6, một số thuộc tính chứa giá trị hàm
7Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Mỗi chuỗi có thuộc tính
89. Khi được gọi, nó sẽ trả về một bản sao của chuỗi trong đó tất cả các chữ cái đã được chuyển thành chữ hoa. Ngoài ra còn cóCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
90, đi theo hướng khácCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Điều thú vị là, mặc dù lệnh gọi tới
89 không truyền bất kỳ đối số nào, nhưng bằng cách nào đó, hàm này có quyền truy cập vào chuỗiCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
92, giá trị có thuộc tính mà chúng tôi đã gọi. Cách thức hoạt động này được mô tả trongCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Các thuộc tính chứa các hàm thường được gọi là các phương thức của giá trị mà chúng thuộc về, như trong “
89 là một phương thức của một chuỗi”Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Ví dụ này minh họa hai phương pháp bạn có thể sử dụng để thao tác với mảng
3Code language: JSON / JSON with Comments [json]
[ 'firstName', 'lastName' ]
Phương thức
94 thêm giá trị vào cuối mảng và phương thứcCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
95 thực hiện ngược lại, loại bỏ giá trị cuối cùng trong mảng và trả về giá trị đóCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Những cái tên hơi ngớ ngẩn này là thuật ngữ truyền thống cho các hoạt động trên ngăn xếp. Ngăn xếp, trong lập trình, là một cấu trúc dữ liệu cho phép bạn đẩy các giá trị vào đó và bật chúng ra một lần nữa theo thứ tự ngược lại để thứ được thêm vào cuối cùng sẽ bị xóa trước. Đây là những điều phổ biến trong lập trình—bạn có thể nhớ ngăn xếp lệnh gọi hàm từ , đây là một ví dụ của cùng một ý tưởng
Các đối tượng
Trở lại sóc đất. Một tập hợp các mục nhật ký hàng ngày có thể được biểu diễn dưới dạng một mảng. Nhưng các mục nhập không chỉ bao gồm một số hoặc một chuỗi—mỗi mục nhập cần lưu trữ một danh sách các hoạt động và một giá trị Boolean cho biết Jacques có biến thành sóc hay không. Lý tưởng nhất là chúng tôi muốn nhóm các giá trị này lại với nhau thành một giá trị và sau đó đặt các giá trị được nhóm đó vào một mảng các mục nhập nhật ký
Các giá trị của đối tượng kiểu là tập hợp các thuộc tính tùy ý. Một cách để tạo đối tượng là sử dụng dấu ngoặc nhọn làm biểu thức
6Code language: JSON / JSON with Comments [json]
[ 'firstName', 'lastName' ]
Bên trong dấu ngoặc nhọn, có một danh sách các thuộc tính được phân tách bằng dấu phẩy. Mỗi thuộc tính có một tên theo sau bởi một dấu hai chấm và một giá trị. Khi một đối tượng được viết trên nhiều dòng, việc thụt vào nó như trong ví dụ sẽ giúp dễ đọc hơn. Các thuộc tính có tên không phải là tên ràng buộc hợp lệ hoặc số hợp lệ phải được trích dẫn
________số 8Điều này có nghĩa là dấu ngoặc nhọn có hai nghĩa trong JavaScript. Khi bắt đầu một câu lệnh, họ bắt đầu một khối câu lệnh. Ở bất kỳ vị trí nào khác, họ mô tả một đối tượng. May mắn thay, hiếm khi hữu ích khi bắt đầu một câu lệnh với một đối tượng trong dấu ngoặc nhọn, vì vậy sự mơ hồ giữa hai điều này không phải là vấn đề lớn
Đọc thuộc tính không tồn tại sẽ cung cấp cho bạn giá trị
71Code language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
Có thể gán giá trị cho biểu thức thuộc tính bằng toán tử
97. Điều này sẽ thay thế giá trị của thuộc tính nếu nó đã tồn tại hoặc tạo một thuộc tính mới trên đối tượng nếu nó không tồn tạiCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Quay trở lại mô hình ràng buộc xúc tu của chúng ta một cách ngắn gọn—các ràng buộc thuộc tính cũng tương tự. Chúng nắm bắt các giá trị, nhưng các ràng buộc và thuộc tính khác có thể đang nắm giữ các giá trị đó. Bạn có thể nghĩ về các vật thể như những con bạch tuộc với bất kỳ số lượng xúc tu nào, mỗi xúc tu đều có một cái tên được xăm trên đó
Người vận hành
98 cắt một xúc tu từ một con bạch tuộc như vậy. Đó là một toán tử đơn nguyên, khi được áp dụng cho một thuộc tính đối tượng, sẽ xóa thuộc tính được đặt tên khỏi đối tượng. Đây không phải là một điều phổ biến để làm, nhưng nó có thểCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
7Code language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
Toán tử
99 nhị phân, khi được áp dụng cho một chuỗi và một đối tượng, sẽ cho bạn biết liệu đối tượng đó có thuộc tính có tên đó hay không. Sự khác biệt giữa việc đặt thuộc tính thànhCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
71 và thực sự xóa thuộc tính đó là, trong trường hợp đầu tiên, đối tượng vẫn có thuộc tính [chỉ là nó không có giá trị rất thú vị], trong khi trong trường hợp thứ hai, thuộc tính không còn nữaCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
Để biết một đối tượng có những thuộc tính nào, bạn có thể sử dụng hàm
53. Bạn cung cấp cho nó một đối tượng và nó trả về một mảng các chuỗi—tên thuộc tính của đối tượngCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
8Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Có một hàm
54 sao chép tất cả các thuộc tính từ đối tượng này sang đối tượng khácCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
9Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Mảng, sau đó, chỉ là một loại đối tượng chuyên dùng để lưu trữ các chuỗi sự vật. Nếu bạn đánh giá
55, nó tạo raCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
56. Bạn có thể thấy chúng là những con bạch tuộc dẹt, dài với tất cả các xúc tu xếp thành một hàng ngay ngắn, được đánh sốCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Chúng tôi sẽ đại diện cho nhật ký mà Jacques lưu giữ dưới dạng một mảng các đối tượng
5Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
khả năng biến đổi
Chúng ta sẽ sớm bắt đầu lập trình thực tế ngay bây giờ. Đầu tiên, có thêm một phần lý thuyết để hiểu
Chúng tôi đã thấy rằng các giá trị đối tượng có thể được sửa đổi. Các loại giá trị được thảo luận trong các chương trước, chẳng hạn như số, chuỗi và Boolean, đều là bất biến—không thể thay đổi giá trị của các loại đó. Bạn có thể kết hợp chúng và lấy các giá trị mới từ chúng, nhưng khi bạn lấy một giá trị chuỗi cụ thể, giá trị đó sẽ luôn giữ nguyên. Văn bản bên trong nó không thể thay đổi. Nếu bạn có một chuỗi chứa
57, mã khác không thể thay đổi một ký tự trong chuỗi của bạn để biến nó thành chính tảCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
58Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Các đối tượng hoạt động khác nhau. Bạn có thể thay đổi các thuộc tính của chúng, khiến một giá trị đối tượng có nội dung khác vào các thời điểm khác nhau
Khi chúng ta có hai số, 120 và 120, chúng ta có thể coi chúng chính xác là cùng một số, cho dù chúng có đề cập đến cùng một bit vật lý hay không. Với các đối tượng, có sự khác biệt giữa việc có hai tham chiếu đến cùng một đối tượng và việc có hai đối tượng khác nhau chứa các thuộc tính giống nhau. Hãy xem xét đoạn mã sau
90Code language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
Các ràng buộc
59 vàCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
900 nắm bắt cùng một đối tượng, đó là lý do tại sao việc thay đổiCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
59 cũng làm thay đổi giá trị củaCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
900. Họ được cho là có cùng bản sắc. Liên kếtCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
903 trỏ đến một đối tượng khác, ban đầu chứa các thuộc tính giống nhưCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
59 nhưng sống một cuộc sống riêng biệtCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Các ràng buộc cũng có thể thay đổi hoặc không đổi, nhưng điều này khác với cách các giá trị của chúng hoạt động. Mặc dù các giá trị số không thay đổi, bạn có thể sử dụng liên kết
905 để theo dõi một số đang thay đổi bằng cách thay đổi giá trị của các điểm liên kết tại. Tương tự, mặc dù bản thân một liên kếtCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
906 với một đối tượng không thể thay đổi và sẽ tiếp tục trỏ đến cùng một đối tượng, nhưng nội dung của đối tượng đó có thể thay đổiCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
91Code language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
Khi bạn so sánh các đối tượng với toán tử
907 của JavaScript, nó sẽ so sánh theo danh tính. nó sẽ tạo raCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
908 chỉ khi cả hai đối tượng đều có cùng giá trị. So sánh các đối tượng khác nhau sẽ trả vềCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
52, ngay cả khi chúng có thuộc tính giống hệt nhau. Không có thao tác so sánh “sâu” nào được tích hợp trong JavaScript, so sánh các đối tượng theo nội dung, nhưng bạn có thể tự viết thao tác đó [đây là một trong những thao tác ở cuối chương này]Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Nhật ký lycanthrope
Vì vậy, Jacques khởi động trình thông dịch JavaScript của mình và thiết lập môi trường mà anh ấy cần để viết nhật ký.
92Code language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
Lưu ý rằng đối tượng được thêm vào tạp chí trông hơi lạ. Thay vì khai báo các thuộc tính như
910, nó chỉ đưa ra một tên thuộc tính. Đây là cách viết tắt có nghĩa giống nhau—nếu tên thuộc tính trong ký hiệu dấu ngoặc nhọn không có giá trị theo sau, thì giá trị của thuộc tính đó được lấy từ liên kết có cùng tênCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
Vì vậy, mỗi tối lúc 10 giờ. m. —hoặc đôi khi vào sáng hôm sau, sau khi leo xuống từ ngăn trên cùng của tủ sách—Jacques ghi lại ngày hôm đó
93Code language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
Sau khi có đủ điểm dữ liệu, anh ấy dự định sử dụng số liệu thống kê để tìm ra sự kiện nào trong số những sự kiện này có thể liên quan đến quá trình sóc hóa
Tương quan là thước đo sự phụ thuộc giữa các biến thống kê. Một biến thống kê không hoàn toàn giống như một biến lập trình. Trong thống kê, bạn thường có một tập hợp các phép đo và mỗi biến được đo cho mọi phép đo. Mối tương quan giữa các biến thường được thể hiện dưới dạng giá trị nằm trong khoảng từ -1 đến 1. Tương quan bằng không có nghĩa là các biến không liên quan. Mối tương quan của một chỉ ra rằng hai cái có liên quan hoàn hảo với nhau—nếu bạn biết cái này thì bạn cũng biết cái kia. Một phủ định cũng có nghĩa là các biến có liên quan hoàn hảo nhưng chúng đối lập nhau khi một biến đúng, biến kia sai
Để tính độ đo tương quan giữa hai biến Boolean, chúng ta có thể sử dụng hệ số phi [ϕ]. Đây là một công thức có đầu vào là một bảng tần số chứa số lần các tổ hợp biến khác nhau được quan sát. Đầu ra của công thức là một số từ -1 đến 1 mô tả mối tương quan
Chúng ta có thể lấy sự kiện ăn bánh pizza và đặt nó vào một bảng tần số như thế này, trong đó mỗi con số biểu thị số lần sự kết hợp đó xảy ra trong các phép đo của chúng ta
Nếu chúng ta gọi bảng đó là n, chúng ta có thể tính ϕ bằng công thức sau
ϕ =
n11n00−n10n01
√ n1•n0•n•1n•0
[Nếu tại thời điểm này, bạn đang đặt cuốn sách xuống để tập trung vào một đoạn hồi tưởng khủng khiếp về lớp toán lớp 10—hãy chờ đã. Tôi không có ý định tra tấn bạn bằng vô số trang ký hiệu khó hiểu—hiện tại chỉ có một công thức này. Và ngay cả với cái này, tất cả những gì chúng tôi làm là biến nó thành JavaScript. ]
Ký hiệu n01 cho biết số phép đo trong đó biến đầu tiên [độ sóc] là sai [0] và biến thứ hai [pizza] là đúng [1]. Trong bảng pizza, n01 là 9
Giá trị n1• đề cập đến tổng của tất cả các phép đo trong đó biến đầu tiên là đúng, là 5 trong bảng ví dụ. Tương tự như vậy, n•0 đề cập đến tổng của các phép đo trong đó biến thứ hai là sai
Vì vậy, đối với bảng pizza, phần phía trên đường chia [số bị chia] sẽ là 1×76−4×9 = 40 và phần phía dưới nó [số chia] sẽ là căn bậc hai của 5×85×10×80 . Điều này dẫn đến ϕ ≈ 0. 069, nhỏ xíu. Ăn pizza dường như không có ảnh hưởng đến sự biến đổi
tính toán tương quan
Chúng ta có thể biểu diễn một bảng hai nhân hai trong JavaScript bằng một mảng bốn phần tử [
911]. Chúng ta cũng có thể sử dụng các cách biểu diễn khác, chẳng hạn như một mảng chứa hai mảng hai phần tử [Code language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
912] hoặc một đối tượng có các tên thuộc tính nhưCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
913 vàCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
914, nhưng mảng phẳng đơn giản và làm cho các biểu thức truy cập bảng trở nên ngắn gọn dễ chịu. Chúng tôi sẽ giải thích các chỉ số cho mảng dưới dạng số nhị phân hai bit, trong đó chữ số ngoài cùng bên trái [quan trọng nhất] đề cập đến biến con sóc và chữ số ngoài cùng bên phải [ít quan trọng nhất] đề cập đến biến sự kiện. Ví dụ: số nhị phânCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
915 đề cập đến trường hợp Jacques đã biến thành một con sóc, nhưng sự kiện [ví dụ: “bánh pizza”] đã không xảy ra. Điều này đã xảy ra bốn lần. Và vì hệ nhị phânCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
915 là 2 trong ký hiệu thập phân, chúng tôi sẽ lưu trữ số này ở chỉ số 2 của mảngCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
Đây là hàm tính hệ số ϕ từ một mảng như vậy
94Code language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
Đây là bản dịch trực tiếp của công thức ϕ sang JavaScript.
917 là hàm căn bậc hai, được cung cấp bởi đối tượngCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
let descriptions = { work: "Went to work", "touched tree": "Touched a tree" };9 trong môi trường JavaScript tiêu chuẩn. Chúng ta phải thêm hai trường từ bảng để có được các trường như n1• vì tổng của các hàng hoặc cột không được lưu trữ trực tiếp trong cấu trúc dữ liệu của chúng ta
Jacques giữ nhật ký của mình trong ba tháng. Tập dữ liệu kết quả có sẵn trong phần dành cho chương này, nơi nó được lưu trữ trong liên kết
919 và trong một tệp có thể tải xuốngCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
Để trích xuất bảng hai nhân hai cho một sự kiện cụ thể từ nhật ký, chúng ta phải lặp lại tất cả các mục nhập và kiểm đếm số lần sự kiện xảy ra liên quan đến các phép biến đổi sóc
95Code language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
Mảng có một phương thức
920 để kiểm tra xem một giá trị đã cho có tồn tại trong mảng hay không. Hàm sử dụng điều đó để xác định xem tên sự kiện mà nó quan tâm có phải là một phần của danh sách sự kiện cho một ngày nhất định hay khôngCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
Phần thân của vòng lặp trong
921 chỉ ra ô nào trong bảng mà mỗi mục nhật ký rơi vào bằng cách kiểm tra xem mục nhập đó có chứa sự kiện cụ thể mà nó quan tâm hay không và liệu sự kiện đó có xảy ra cùng với sự cố sóc hay không. Vòng lặp sau đó thêm một vào ô đúng trong bảngCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
Bây giờ chúng ta có các công cụ cần thiết để tính toán các mối tương quan riêng lẻ. Bước duy nhất còn lại là tìm mối tương quan cho mọi loại sự kiện đã được ghi lại và xem liệu có điều gì nổi bật không
vòng lặp mảng
Trong hàm
921, có một vòng lặp như thế nàyCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
96Code language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
Loại vòng lặp này phổ biến trong JavaScript cổ điển—đi qua từng mảng một phần tử là thứ xuất hiện rất nhiều và để làm được điều đó, bạn sẽ chạy một bộ đếm theo chiều dài của mảng và lần lượt chọn ra từng phần tử
Có một cách đơn giản hơn để viết các vòng lặp như vậy trong JavaScript hiện đại
97Code language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
Khi một vòng lặp
923 trông như thế này, với từCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
924 sau một định nghĩa biến, nó sẽ lặp qua các phần tử của giá trị đã cho sauCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
924. Điều này không chỉ hoạt động đối với mảng mà còn đối với chuỗi và một số cấu trúc dữ liệu khác. Chúng ta sẽ thảo luận về cách nó hoạt động trong Chương 6Code language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
phân tích cuối cùng
Chúng ta cần tính toán mối tương quan cho mọi loại sự kiện xảy ra trong tập dữ liệu. Để làm điều đó, trước tiên chúng ta cần tìm mọi loại sự kiện
98Code language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
Bằng cách xem qua tất cả các sự kiện và thêm những sự kiện chưa có vào mảng
926, hàm sẽ thu thập mọi loại sự kiệnCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
Sử dụng điều đó, chúng ta có thể thấy tất cả các mối tương quan
99Code language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
Hầu hết các mối tương quan dường như nằm gần bằng không. Ăn cà rốt, bánh mì hoặc bánh pudding dường như không kích hoạt sóc lycanthropy. Nó dường như xảy ra thường xuyên hơn vào cuối tuần. Hãy lọc kết quả để chỉ hiển thị các mối tương quan lớn hơn 0. 1 hoặc nhỏ hơn -0. 1
70Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
à há. Có hai yếu tố có mối tương quan rõ ràng mạnh hơn các yếu tố khác. Ăn đậu phộng có tác động tích cực mạnh mẽ đến cơ hội biến thành sóc, trong khi đánh răng có tác động tiêu cực đáng kể
Hấp dẫn. Hãy thử một cái gì đó
71Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Đó là một kết quả mạnh mẽ. Hiện tượng xảy ra chính xác khi Jacques ăn đậu phộng và không đánh răng. Giá như anh ấy không phải là một người lười biếng trong việc vệ sinh răng miệng, anh ấy thậm chí sẽ không bao giờ nhận ra căn bệnh của mình
Biết được điều này, Jacques ngừng ăn đậu phộng hoàn toàn và thấy rằng sự biến đổi của anh ấy không quay trở lại
Trong một vài năm, mọi thứ trở nên tuyệt vời đối với Jacques. Nhưng đến một lúc nào đó anh ta mất việc. Bởi vì anh ấy sống ở một đất nước tồi tệ, nơi không có việc làm đồng nghĩa với không có dịch vụ y tế, anh ấy buộc phải làm việc cho một rạp xiếc nơi anh ấy biểu diễn với vai The Incredible Squirrelman, nhét bơ đậu phộng vào miệng trước mỗi buổi biểu diễn.
Một ngày nọ, chán ngấy với sự tồn tại đáng thương này, Jacques không thể biến trở lại hình dạng con người của mình, nhảy qua một vết nứt trong lều xiếc và biến mất trong rừng. Anh ấy không bao giờ được nhìn thấy nữa
Mảng hơn nữa
Trước khi kết thúc chương này, tôi muốn giới thiệu với bạn một vài khái niệm liên quan đến đối tượng. Tôi sẽ bắt đầu bằng cách giới thiệu một số phương thức mảng thường hữu ích
Chúng ta đã thấy
94 vàCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
95, thêm và xóa các phần tử ở cuối một mảng, trong chương này. Các phương thức tương ứng để thêm và xóa các thứ ở đầu mảng được gọi là _______ 1929 và ________ 1930Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
72Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Chương trình đó quản lý một hàng các nhiệm vụ. Bạn thêm nhiệm vụ vào cuối hàng đợi bằng cách gọi ________ 1931 và khi bạn đã sẵn sàng làm việc gì đó, bạn gọi ________ 1932 để lấy [và xóa] mục phía trước khỏi hàng đợi. Hàm
933 cũng thêm một tác vụ nhưng thêm nó vào phía trước thay vì phía sau hàng đợiCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
Để tìm kiếm một giá trị cụ thể, mảng cung cấp phương thức
934. Phương thức tìm kiếm thông qua mảng từ đầu đến cuối và trả về chỉ mục tại đó giá trị được yêu cầu được tìm thấy—hoặc -1 nếu không tìm thấy. Để tìm kiếm từ cuối thay vì bắt đầu, có một phương pháp tương tự gọi làCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
935Code language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
73Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Cả
934 vàCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
935 đều có đối số thứ hai tùy chọn cho biết nơi bắt đầu tìm kiếmCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
Một phương thức mảng cơ bản khác là
938, lấy các chỉ số bắt đầu và kết thúc và trả về một mảng chỉ có các phần tử ở giữa chúng. Chỉ mục bắt đầu bao gồm, chỉ mục kết thúc loại trừCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
74Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Khi chỉ mục kết thúc không được cung cấp,
938 sẽ lấy tất cả các phần tử sau chỉ mục bắt đầu. Bạn cũng có thể bỏ qua chỉ mục bắt đầu để sao chép toàn bộ mảngCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
Phương thức
940 có thể được sử dụng để dán các mảng lại với nhau để tạo một mảng mới, tương tự như những gì toán tửCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
941 thực hiện đối với các chuỗiCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
Ví dụ sau đây cho thấy cả
940 vàCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
938 đang hoạt động. Nó nhận một mảng và một chỉ mục, và nó trả về một mảng mới là bản sao của mảng ban đầu với phần tử tại chỉ mục đã cho đã bị xóa
const person = { firstName: 'John', lastName: 'Doe' };
Code language: JavaScript [javascript]
75Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Nếu bạn chuyển _____1940 một đối số không phải là một mảng, thì giá trị đó sẽ được thêm vào mảng mới như thể nó là một mảng một phần tử
Chuỗi và thuộc tính của chúng
Chúng ta có thể đọc các thuộc tính như
let descriptions = { work: "Went to work", "touched tree": "Touched a tree" };6 và
89 từ các giá trị chuỗi. Nhưng nếu bạn cố gắng thêm một thuộc tính mới, nó sẽ không dínhCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
76Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Các giá trị của kiểu chuỗi, số và Boolean không phải là các đối tượng và mặc dù ngôn ngữ không phàn nàn nếu bạn cố đặt các thuộc tính mới trên chúng, nhưng nó không thực sự lưu trữ các thuộc tính đó. Như đã đề cập trước đó, các giá trị như vậy là bất biến và không thể thay đổi
Nhưng những loại này có các thuộc tính tích hợp. Mỗi giá trị chuỗi có một số phương thức. Một số rất hữu ích là
938 vàCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
934, giống với các phương thức mảng cùng tênCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
77Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Một điểm khác biệt là một chuỗi
934 có thể tìm kiếm một chuỗi chứa nhiều hơn một ký tự, trong khi phương thức mảng tương ứng chỉ tìm kiếm một phần tử duy nhấtCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
78Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Phương thức
950 xóa khoảng trắng [dấu cách, dòng mới, tab và các ký tự tương tự] khỏi đầu và cuối chuỗiCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
79Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Hàm
951 từ chương trước cũng tồn tại như một phương thức. Nó được gọi làCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
952 và lấy ký tự đệm và độ dài mong muốn làm đối sốCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
30Code language: JSON / JSON with Comments [json]
[ 'firstName', 'lastName' ]
Bạn có thể tách một chuỗi trên mỗi lần xuất hiện của một chuỗi khác với
953 và nối lại chuỗi đó vớiCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
954Code language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
31Code language: JSON / JSON with Comments [json]
[ 'firstName', 'lastName' ]
Một chuỗi có thể được lặp lại bằng phương thức
955, phương thức này tạo ra một chuỗi mới chứa nhiều bản sao của chuỗi ban đầu, được dán lại với nhauCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
32Code language: JSON / JSON with Comments [json]
[ 'firstName', 'lastName' ]
Chúng ta đã thấy thuộc tính
let descriptions = { work: "Went to work", "touched tree": "Touched a tree" };6 của kiểu chuỗi. Truy cập các ký tự riêng lẻ trong một chuỗi giống như truy cập các phần tử của mảng [với một lưu ý mà chúng ta sẽ thảo luận trong phần ]
33Code language: JSON / JSON with Comments [json]
[ 'firstName', 'lastName' ]
Thông số nghỉ ngơi
Nó có thể hữu ích cho một hàm chấp nhận bất kỳ số lượng đối số nào. Ví dụ:
let descriptions = { work: "Went to work", "touched tree": "Touched a tree" };5 tính toán giá trị tối đa của tất cả các đối số mà nó đưa ra
Để viết một hàm như vậy, bạn đặt ba dấu chấm trước tham số cuối cùng của hàm, như thế này
34Code language: JSON / JSON with Comments [json]
[ 'firstName', 'lastName' ]
Khi một hàm như vậy được gọi, tham số còn lại được liên kết với một mảng chứa tất cả các đối số khác. Nếu có các tham số khác trước nó, giá trị của chúng không phải là một phần của mảng đó. Khi, như trong
let descriptions = { work: "Went to work", "touched tree": "Touched a tree" };8, nó là tham số duy nhất, nó sẽ giữ tất cả các đối số
Bạn có thể sử dụng ký hiệu dấu ba chấm tương tự để gọi một hàm với một mảng đối số
35Code language: JSON / JSON with Comments [json]
[ 'firstName', 'lastName' ]
Điều này "trải rộng" ra mảng vào lệnh gọi hàm, chuyển các phần tử của nó dưới dạng các đối số riêng biệt. Có thể bao gồm một mảng như vậy cùng với các đối số khác, như trong
959Code language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
Ký hiệu mảng dấu ngoặc vuông tương tự cho phép toán tử dấu ba chấm trải một mảng khác sang mảng mới
36Code language: JSON / JSON with Comments [json]
[ 'firstName', 'lastName' ]
đối tượng Toán học
Như chúng ta đã thấy,
let descriptions = { work: "Went to work", "touched tree": "Touched a tree" };9 là một tập hợp các hàm tiện ích liên quan đến số, chẳng hạn như
let descriptions = { work: "Went to work", "touched tree": "Touched a tree" };5 [tối đa],
962 [tối thiểu] vàCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
917 [căn bậc hai]Code language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
Đối tượng
let descriptions = { work: "Went to work", "touched tree": "Touched a tree" };9 được sử dụng như một thùng chứa để nhóm một loạt các chức năng liên quan. Chỉ có một đối tượng
let descriptions = { work: "Went to work", "touched tree": "Touched a tree" };9 và nó hầu như không bao giờ hữu ích như một giá trị. Thay vào đó, nó cung cấp một không gian tên để tất cả các chức năng và giá trị này không phải là các ràng buộc toàn cầu
Có quá nhiều ràng buộc toàn cục “làm ô nhiễm” không gian tên. Càng nhiều tên được sử dụng, bạn càng có nhiều khả năng vô tình ghi đè lên giá trị của một số ràng buộc hiện có. Ví dụ: bạn không muốn đặt tên thứ gì đó là
let descriptions = { work: "Went to work", "touched tree": "Touched a tree" };8 trong một trong các chương trình của mình. Vì hàm
let descriptions = { work: "Went to work", "touched tree": "Touched a tree" };8 tích hợp sẵn của JavaScript được giấu an toàn bên trong đối tượng
let descriptions = { work: "Went to work", "touched tree": "Touched a tree" };9, nên chúng ta không phải lo lắng về việc ghi đè lên nó
Nhiều ngôn ngữ sẽ ngăn bạn hoặc ít nhất là cảnh báo bạn khi bạn đang xác định một liên kết có tên đã được sử dụng. JavaScript thực hiện điều này đối với các ràng buộc bạn đã khai báo bằng
905 hoặcCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
906 nhưng—ngược lại—không phải đối với các ràng buộc tiêu chuẩn cũng như các ràng buộc được khai báo bằngCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
971 hoặcCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
972Code language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
Quay lại đối tượng
let descriptions = { work: "Went to work", "touched tree": "Touched a tree" };9. Nếu bạn cần làm lượng giác,
let descriptions = { work: "Went to work", "touched tree": "Touched a tree" };9 có thể giúp. Nó chứa
975 [cosine],Code language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
976 [sin] vàCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
977 [tiếp tuyến], cũng như các hàm nghịch đảo của chúng, lần lượt làCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
978,Code language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
979 vàCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
980. Số π [pi]—hoặc ít nhất là giá trị gần đúng nhất phù hợp với số JavaScript—có sẵn dưới dạngCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
981. Có một truyền thống lập trình cũ là viết hoa tất cả các tên của các giá trị không đổiCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
37Code language: JSON / JSON with Comments [json]
[ 'firstName', 'lastName' ]
Nếu sin và cosin không phải là thứ bạn quen thuộc, đừng lo lắng. Khi chúng được sử dụng trong cuốn sách này, trong , tôi sẽ giải thích chúng
Ví dụ trước sử dụng
982. Đây là một hàm trả về một số giả ngẫu nhiên mới giữa 0 [bao gồm] và một [độc quyền] mỗi khi bạn gọi nóCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
38Code language: JSON / JSON with Comments [json]
[ 'firstName', 'lastName' ]
Mặc dù máy tính là cỗ máy xác định—chúng luôn phản ứng theo cùng một cách nếu được cung cấp cùng một đầu vào—chúng có thể tạo ra các số xuất hiện ngẫu nhiên. Để làm điều đó, máy sẽ giữ một số giá trị ẩn và bất cứ khi nào bạn yêu cầu một số ngẫu nhiên mới, nó sẽ thực hiện các phép tính phức tạp trên giá trị ẩn này để tạo ra một giá trị mới. Nó lưu trữ một giá trị mới và trả về một số số bắt nguồn từ nó. Bằng cách đó, nó có thể tạo ra những con số mới, khó dự đoán theo cách có vẻ như ngẫu nhiên
Nếu chúng ta muốn một số nguyên ngẫu nhiên thay vì một số phân số, chúng ta có thể sử dụng ________ 1983 [làm tròn xuống số nguyên gần nhất] trên kết quả của ________ 1982
39Code language: JSON / JSON with Comments [json]
[ 'firstName', 'lastName' ]
Nhân số ngẫu nhiên với 10 sẽ cho ta một số lớn hơn hoặc bằng 0 và nhỏ hơn 10. Vì
983 làm tròn xuống, biểu thức này sẽ tạo ra, với cơ hội như nhau, bất kỳ số nào từ 0 đến 9Code language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
Ngoài ra còn có các hàm
986 [đối với “trần”, làm tròn lên đến một số nguyên],Code language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
987 [đến số nguyên gần nhất] vàCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
988, lấy giá trị tuyệt đối của một số, nghĩa là nó phủ định các giá trị âm nhưng để lại giá trị dươngCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
hủy hoại
Hãy quay lại hàm
989 trong giây látCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
60Code language: JSON / JSON with Comments [json]
[ 'firstName', 'lastName' ]
Một trong những lý do khiến hàm này khó đọc là chúng ta có một liên kết trỏ vào mảng của mình, nhưng chúng tôi muốn có các liên kết cho các phần tử của mảng hơn, nghĩa là,
990, v.v. May mắn thay, có một cách ngắn gọn để làm điều này trong JavaScriptCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
61Code language: JSON / JSON with Comments [json]
[ 'firstName', 'lastName' ]
Điều này cũng hoạt động đối với các ràng buộc được tạo bằng
905,Code language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
971 hoặcCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
906. Nếu bạn biết giá trị mà bạn đang ràng buộc là một mảng, bạn có thể sử dụng dấu ngoặc vuông để “nhìn vào bên trong” giá trị, ràng buộc nội dung của nóCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
Một thủ thuật tương tự hoạt động với các đối tượng, sử dụng dấu ngoặc nhọn thay vì dấu ngoặc vuông
62Code language: JSON / JSON with Comments [json]
[ 'firstName', 'lastName' ]
Lưu ý rằng nếu bạn cố gắng hủy cấu trúc
70 hoặcCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
71, bạn sẽ gặp lỗi, tương tự như khi bạn cố gắng truy cập trực tiếp vào thuộc tính của các giá trị đóCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
JSON
Bởi vì các thuộc tính chỉ nắm bắt giá trị của chúng, thay vì chứa nó, các đối tượng và mảng được lưu trữ trong bộ nhớ của máy tính dưới dạng các chuỗi bit chứa địa chỉ—vị trí trong bộ nhớ—của nội dung của chúng. Vì vậy, một mảng với một mảng khác bên trong nó bao gồm [ít nhất] một vùng bộ nhớ cho mảng bên trong và một vùng khác cho mảng bên ngoài, chứa [trong số những thứ khác] một số nhị phân biểu thị vị trí của mảng bên trong
Nếu bạn muốn lưu dữ liệu trong một tệp để sử dụng sau này hoặc gửi dữ liệu đó đến một máy tính khác qua mạng, bạn phải bằng cách nào đó chuyển đổi các địa chỉ bộ nhớ lộn xộn này thành một mô tả có thể được lưu trữ hoặc gửi đi. Tôi cho rằng bạn có thể gửi toàn bộ bộ nhớ máy tính của mình cùng với địa chỉ của giá trị mà bạn quan tâm, nhưng đó dường như không phải là cách tiếp cận tốt nhất
Những gì chúng ta có thể làm là tuần tự hóa dữ liệu. Điều đó có nghĩa là nó được chuyển đổi thành một mô tả phẳng. Một định dạng tuần tự hóa phổ biến được gọi là JSON [phát âm là “Jason”], viết tắt của JavaScript Object Notation. Nó được sử dụng rộng rãi như một định dạng lưu trữ và giao tiếp dữ liệu trên Web, ngay cả trong các ngôn ngữ khác ngoài JavaScript
JSON trông tương tự như cách viết mảng và đối tượng của JavaScript, với một số hạn chế. Tất cả các tên thuộc tính phải được bao quanh bởi dấu ngoặc kép và chỉ các biểu thức dữ liệu đơn giản mới được phép—không gọi hàm, liên kết hoặc bất kỳ thứ gì liên quan đến tính toán thực tế. Nhận xét không được phép trong JSON
Một mục nhật ký có thể trông như thế này khi được biểu diễn dưới dạng dữ liệu JSON
63Code language: JSON / JSON with Comments [json]
[ 'firstName', 'lastName' ]
JavaScript cung cấp cho chúng ta các hàm
996 vàCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
997 để chuyển đổi dữ liệu sang và từ định dạng này. Cái đầu tiên lấy một giá trị JavaScript và trả về một chuỗi được mã hóa JSON. Cái thứ hai lấy một chuỗi như vậy và chuyển đổi nó thành giá trị mà nó mã hóaCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
64Code language: JSON / JSON with Comments [json]
[ 'firstName', 'lastName' ]
Tóm lược
Các đối tượng và mảng [là một loại đối tượng cụ thể] cung cấp các cách để nhóm một số giá trị thành một giá trị duy nhất. Về mặt khái niệm, điều này cho phép chúng ta bỏ nhiều thứ có liên quan vào một chiếc túi và chạy xung quanh với chiếc túi, thay vì vòng tay ôm lấy tất cả những thứ riêng lẻ và cố gắng giữ chúng riêng lẻ
Hầu hết các giá trị trong JavaScript đều có thuộc tính, ngoại lệ là
70 vàCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
71. Thuộc tính được truy cập bằng cách sử dụngCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
700 hoặcCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
701. Các đối tượng có xu hướng sử dụng tên cho các thuộc tính của chúng và lưu trữ ít nhiều một bộ cố định của chúng. Mặt khác, các mảng thường chứa các lượng giá trị giống hệt nhau về mặt khái niệm khác nhau và sử dụng các số [bắt đầu từ 0] làm tên của các thuộc tính của chúngCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Có một số thuộc tính được đặt tên trong mảng, chẳng hạn như
let descriptions = { work: "Went to work", "touched tree": "Touched a tree" };6 và một số phương thức. Phương thức là các hàm sống trong các thuộc tính và [thường] hành động dựa trên giá trị mà chúng là thuộc tính của
Bạn có thể lặp qua các mảng bằng cách sử dụng một loại vòng lặp đặc biệt
923—Code language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
704Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
bài tập
tổng của một phạm vi
Phần giới thiệu của cuốn sách này đề cập đến những điều sau đây như một cách hay để tính tổng của một dãy số
65Code language: JSON / JSON with Comments [json]
[ 'firstName', 'lastName' ]
Viết hàm
705 nhận hai đối số,Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
706 vàCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
707, rồi trả về một mảng chứa tất cả các số từCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
706 đến [và bao gồm]Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
707Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Tiếp theo, hãy viết hàm
710 nhận vào một mảng số và trả về tổng của những số này. Chạy chương trình ví dụ và xem nó có thực sự trả về 55 khôngCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Là một nhiệm vụ bổ sung, hãy sửa đổi hàm
705 của bạn để nhận một đối số thứ ba tùy chọn cho biết giá trị "bước" được sử dụng khi xây dựng mảng. Nếu không có bước nào được đưa ra, các phần tử sẽ tăng lên từng bước một, tương ứng với hành vi cũ. Hàm gọiCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
712 sẽ trả vềCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
713. Đảm bảo rằng nó cũng hoạt động với các giá trị bước âm đểCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
714 tạo raCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
715Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
66Code language: JSON / JSON with Comments [json]
[ 'firstName', 'lastName' ]
Việc xây dựng một mảng được thực hiện dễ dàng nhất bằng cách trước tiên khởi tạo một liên kết tới
716 [một mảng mới, trống] và liên tục gọi phương thứcCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
94 của nó để thêm một giá trị. Đừng quên trả về mảng ở cuối hàmCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Vì ranh giới kết thúc là bao gồm, bạn sẽ cần sử dụng toán tử
718 thay vìCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
719 để kiểm tra kết thúc vòng lặp của mìnhCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Tham số bước có thể là một tham số tùy chọn mặc định [sử dụng toán tử
97] thành 1Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Để
705 hiểu các giá trị bước âm có lẽ được thực hiện tốt nhất bằng cách viết hai vòng lặp riêng biệt—một vòng lặp để đếm lên và một vòng lặp để đếm xuống—vì phép so sánh để kiểm tra xem vòng lặp đã kết thúc hay chưa cần phải làCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
722 thay vìCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
718 khi đếm xuốngCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Cũng có thể đáng để sử dụng một bước mặc định khác, cụ thể là -1, khi phần cuối của phạm vi nhỏ hơn phần đầu. Bằng cách đó,
724 trả về một cái gì đó có ý nghĩa, thay vì bị mắc kẹt trong một vòng lặp vô hạn. Có thể tham khảo các tham số trước đó trong giá trị mặc định của tham sốCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Đảo ngược một mảng
Mảng có phương thức
725 thay đổi mảng bằng cách đảo ngược thứ tự xuất hiện các phần tử của mảng. Đối với bài tập này, hãy viết hai hàm,Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
726 vàCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
727. Đầu tiên,Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
726, lấy một mảng làm đối số và tạo một mảng mới có cùng các phần tử theo thứ tự nghịch đảo. Phương thức thứ hai,Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
727, thực hiện những gì mà phương thứcCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
725 thực hiện. nó sửa đổi mảng được cho làm đối số bằng cách đảo ngược các phần tử của nó. Không thể sử dụng phương phápCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
725 tiêu chuẩnCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Nghĩ lại các ghi chú về tác dụng phụ và chức năng thuần túy trong , bạn mong muốn biến thể nào sẽ hữu ích trong nhiều tình huống hơn?
67Code language: JSON / JSON with Comments [json]
[ 'firstName', 'lastName' ]
Có hai cách rõ ràng để thực hiện
726. Đầu tiên là chỉ cần đi qua mảng đầu vào từ trước ra sau và sử dụng phương thứcCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
929 trên mảng mới để chèn từng phần tử vào đầu của nó. Cách thứ hai là lặp ngược mảng đầu vào và sử dụng phương thứcCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
94. Lặp lại một mảng ngược yêu cầu một đặc điểm kỹ thuật [hơi khó xử]Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
923, nhưCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
736Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Đảo ngược mảng tại chỗ khó hơn. Bạn phải cẩn thận để không ghi đè lên các phần tử mà sau này bạn sẽ cần. Sử dụng
726 hoặc sao chép toàn bộ mảng [Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
738 là một cách hay để sao chép một mảng] hoạt động nhưng gian lậnCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Thủ thuật là hoán đổi phần tử đầu tiên và phần tử cuối cùng, sau đó là phần tử thứ hai và phần tử thứ hai với phần tử cuối cùng, v.v. Bạn có thể thực hiện việc này bằng cách lặp trên một nửa độ dài của mảng [dùng
983 để làm tròn xuống—bạn không cần chạm vào phần tử ở giữa trong một mảng có số phần tử lẻ] và hoán đổi phần tử ở vị tríCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
81 bằng một . Bạn có thể sử dụng liên kết cục bộ để giữ nhanh một trong các phần tử, ghi đè lên phần tử đó bằng hình ảnh phản chiếu của nó, sau đó đặt giá trị từ liên kết cục bộ vào vị trí mà hình ảnh phản chiếu từng làCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Một danh sách
Các đối tượng, như các đốm giá trị chung, có thể được sử dụng để xây dựng tất cả các loại cấu trúc dữ liệu. Một cấu trúc dữ liệu phổ biến là danh sách [đừng nhầm với mảng]. Danh sách là một tập hợp các đối tượng lồng nhau, với đối tượng đầu tiên giữ tham chiếu đến đối tượng thứ hai, đối tượng thứ hai đến đối tượng thứ ba, v.v.
68Code language: JSON / JSON with Comments [json]
[ 'firstName', 'lastName' ]
Các đối tượng kết quả tạo thành một chuỗi, như thế này
Một điều thú vị về danh sách là chúng có thể chia sẻ các phần trong cấu trúc của chúng. Ví dụ: nếu tôi tạo hai giá trị mới
742 vàCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
743 [vớiCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
744 đề cập đến ràng buộc được xác định trước đó], cả hai đều là danh sách độc lập nhưng chúng có chung cấu trúc tạo nên ba phần tử cuối cùng của chúng. Danh sách ban đầu vẫn là danh sách ba phần tử hợp lệCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Viết một hàm
745 xây dựng cấu trúc danh sách giống như cấu trúc được hiển thị khi đưa ra đối sốCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
746. Đồng thời viết một hàmCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
747 để tạo một mảng từ một danh sách. Sau đó, thêm một hàm trợ giúpCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
748, lấy một phần tử và một danh sách rồi tạo một danh sách mới thêm phần tử vào phía trước danh sách đầu vào vàCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
749, lấy một danh sách và một số rồi trả về phần tử ở vị trí đã cho trongCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Nếu bạn chưa viết, hãy viết một phiên bản đệ quy của
749Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
69Code language: JSON / JSON with Comments [json]
[ 'firstName', 'lastName' ]
Xây dựng danh sách dễ dàng hơn khi thực hiện từ trước ra sau. Vì vậy,
745 có thể lặp lại mảng ngược [xem bài tập trước] và, đối với mỗi phần tử, thêm một đối tượng vào danh sách. Bạn có thể sử dụng liên kết cục bộ để giữ phần danh sách đã được tạo cho đến nay và sử dụng phép gán nhưCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
753 để thêm phần tửCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Để chạy qua một danh sách [trong
747 vàCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
749], có thể sử dụng đặc tả vòng lặpCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
923 như thế nàyCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
let descriptions = { work: "Went to work", "touched tree": "Touched a tree" };0
Bạn có thể thấy nó hoạt động như thế nào không? . Khi kết thúc một lần lặp,
757 chuyển sang danh sách con tiếp theo. Khi đó là null, chúng tôi đã đến cuối danh sách và vòng lặp kết thúcCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Tương tự, phiên bản đệ quy của
749 sẽ xem xét một phần nhỏ hơn bao giờ hết của “đuôi” của danh sách và đồng thời đếm ngược chỉ mục cho đến khi nó bằng 0, tại thời điểm đó, nó có thể trả về thuộc tínhCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
74 của nút đó. . Để lấy phần tử thứ 0 của danh sách, bạn chỉ cần lấy thuộc tínhCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
74 của nút đầu của nó. Để lấy phần tử N + 1, bạn lấy phần tử thứ N của danh sách nằm trong thuộc tínhCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
763 của danh sách nàyCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
So sánh sâu sắc
Toán tử
907 so sánh các đối tượng theo danh tính. Nhưng đôi khi bạn muốn so sánh các giá trị thuộc tính thực tế của chúngCode language: JavaScript [javascript]
const person = { firstName: 'John', lastName: 'Doe' };
Viết một hàm
765 nhận hai giá trị và chỉ trả về true nếu chúng có cùng giá trị hoặc là các đối tượng có cùng thuộc tính, trong đó giá trị của các thuộc tính bằng nhau khi so sánh với lệnh gọi đệ quy tớiCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
765Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Để tìm hiểu xem các giá trị có nên được so sánh trực tiếp hay không [sử dụng toán tử
767 cho điều đó] hoặc so sánh các thuộc tính của chúng, bạn có thể sử dụng toán tửCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
768. Nếu nó tạo raCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
56 cho cả hai giá trị, bạn nên so sánh sâu. Nhưng bạn phải tính đến một ngoại lệ ngớ ngẩn. vì một tai nạn lịch sử,Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
770 cũng tạo raCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
56Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Hàm
53 sẽ hữu ích khi bạn cần xem qua các thuộc tính của các đối tượng để so sánh chúngCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
let descriptions = { work: "Went to work", "touched tree": "Touched a tree" };1
Bài kiểm tra xem bạn có đang xử lý một đối tượng thực hay không sẽ trông giống như
773. Hãy cẩn thận chỉ so sánh các thuộc tính khi cả hai đối số đều là đối tượng. Trong tất cả các trường hợp khác, bạn có thể ngay lập tức trả lại kết quả của việc áp dụngCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
767Code language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Sử dụng
53 để xem qua các thuộc tính. Bạn cần kiểm tra xem cả hai đối tượng có cùng một bộ tên thuộc tính hay không và liệu các thuộc tính đó có giá trị giống nhau không. Một cách để làm điều đó là đảm bảo rằng cả hai đối tượng đều có cùng số thuộc tính [độ dài của danh sách thuộc tính giống nhau]. Và sau đó, khi lặp qua một trong các thuộc tính của đối tượng để so sánh chúng, trước tiên hãy luôn đảm bảo rằng đối tượng kia thực sự có thuộc tính theo tên đó. Nếu chúng có cùng số lượng thuộc tính và tất cả các thuộc tính trong cái này cũng tồn tại trong cái kia, thì chúng có cùng một bộ tên thuộc tínhCode language: JavaScript [javascript]
const propertyNames = Object.keys[person]; console.log[propertyNames];
Trả về giá trị chính xác từ hàm được thực hiện tốt nhất bằng cách trả về false ngay lập tức khi tìm thấy giá trị không khớp và trả về true ở cuối hàm