Mảng có phải là loại tham chiếu trong javascript không?

Tìm hiểu lý do tại sao hầu hết mọi người sao chép sai đối tượng và mảng trong JavaScript. Và tại sao bạn sẽ không phạm sai lầm đó

Tạo bởi Maximilian Schwarzmüller

30 Tháng Một, 2018

Xem video hướng dẫn

# Nguyên thủy là gì?

Bài viết và video này có tên là "Tham khảo so với giá trị nguyên thủy"

Vì vậy, hãy bắt đầu - "Nguyên thủy" là gì?

Đây là một ví dụ

var age = 28

Biến

var name = 'Max' // strings are primitives, too!
var isMale = true // so are booleans
0 [nhân tiện, bạn cũng có thể sử dụng
var name = 'Max' // strings are primitives, too!
var isMale = true // so are booleans
1 hoặc
var name = 'Max' // strings are primitives, too!
var isMale = true // so are booleans
2] lưu trữ một giá trị số. Số
var name = 'Max' // strings are primitives, too!
var isMale = true // so are booleans
3

Các giá trị số được gọi là "giá trị nguyên thủy" vì chúng là các khối xây dựng ứng dụng JavaScript rất đơn giản

Các khối xây dựng cốt lõi đơn giản khác là

var name = 'Max' // strings are primitives, too!
var isMale = true // so are booleans

Vì vậy, số, chuỗi, booleans - những thứ này có lẽ rất quen thuộc với bạn.

var name = 'Max' // strings are primitives, too!
var isMale = true // so are booleans
4 và
var name = 'Max' // strings are primitives, too!
var isMale = true // so are booleans
5 là các kiểu nguyên thủy bổ sung

Các khóa học cao cấp liên quan

  • JavaScript - Hướng dẫn đầy đủ

    Học JavaScript nhanh chóng - khóa học này được tối ưu hóa để dạy bạn JavaScript nhanh nhất có thể

  • Đào tạo ES6 cấp tốc

    Nắm vững kiến ​​thức cơ bản về JavaScript?

    Trong bài đăng này, chúng ta sẽ thảo luận về một trong những chủ đề quan trọng nhất của lập trình, đó là giá trị và các loại tham chiếu. Đặc biệt, trong bài viết này tôi sẽ cố gắng giải thích nó bằng Javascript. Đây là một số phần chúng ta sẽ thảo luận

    • Các loại giá trị và tham chiếu là gì?
    • Sự khác biệt giữa chúng là gì?
    • Tại sao họ quan trọng để biết?

    Các loại giá trị và tham chiếu là gì?

    Nếu bạn đã viết mã được một thời gian, bạn có thể quen thuộc với một số loại dữ liệu này, chẳng hạn như chuỗi, số hoặc boolean. Các kiểu dữ liệu đó được gọi là các kiểu dữ liệu nguyên thủy. Các kiểu dữ liệu nguyên thủy sử dụng phương thức “pass by value” khi gán chúng cho một giá trị. Vì vậy, chúng ta cũng có thể gọi các loại này là một loại giá trị. Trong Javascript, các loại này là chuỗi, số, boolean, null và không xác định. Hãy cùng xem một số ví dụ dưới đây

    ví dụ về loại giá trị trong javascript

    Trong ví dụ trên, bạn có thể thấy rằng trong Javascript hay hầu hết các ngôn ngữ lập trình, thuật ngữ “chuyển giá trị” này được thực hiện đơn giản bằng cách gán giá trị ở vế phải của toán tử bằng cho vế trái của biến của chúng ta và lưu nó vào bộ nhớ. Điều đó có nghĩa là biến luôn giữ giá trị thực mà chúng ta cung cấp cho chúng. Những điều này có thể khá đơn giản, vì vậy hãy chuyển sang các loại tham chiếu để thấy sự khác biệt. Các loại tham chiếu, như tên gọi của nó, gợi ý rằng nó sử dụng phương thức “chuyển qua tham chiếu” khi chúng ta gán một số giá trị cho chúng. Trong Javascript, điều này bao gồm các mảng và đối tượng. Hãy xem một số ví dụ

    ví dụ về loại tham chiếu trong javascript

    Vì vậy, "tham chiếu" thực sự có nghĩa là gì ở đây, điều đó có nghĩa là dưới mui xe, các mảng và đối tượng này chỉ giữ tham chiếu bộ nhớ làm giá trị của nó thay vì lưu giá trị thực ngay lập tức không giống như các loại giá trị trước đây. Tham chiếu này sau đó trỏ đến giá trị mà chúng tôi gán cho chúng. Okay, vậy bây giờ bạn đã biết định nghĩa của 2 loại này chưa. Tuy nhiên, để hiểu rõ hơn và xem các loại này là hành động, hãy chuyển sang phần tiếp theo

    Sự khác biệt giữa chúng là gì?

    Vì chúng tôi đang sử dụng Javascript, tôi sẽ thử sử dụng chức năng, để chỉ ra sự khác biệt giữa các loại này trong phần này

    ví dụ về loại giá trị với chức năng

    Như bạn có thể thấy trong ví dụ trên, tôi có hàm valueTypes với một tham số. Sau đó, gọi hàm đó và truyền biến cho nó. Nếu bạn thử chạy đoạn mã trên, bạn sẽ thấy biến “a” trong hàm sẽ cho kết quả là 20, nhưng sau khi thực thi biến “a” bên ngoài hàm vẫn cho kết quả là 10. Tại sao điều này lại xảy ra?, nếu chúng ta tuân theo quy tắc “chuyển theo giá trị”, khi chúng ta gọi hàm, chúng ta gán giá trị của “a” cho biến “a” trong tham số hàm, trong đó hai biến này có bộ nhớ khác nhau . Sau đó, khi tôi gán lại giá trị của “a” bên trong hàm, giá trị mới được chuyển đến phép gán đích là biến “a” của chúng ta. Vì 2 biến này khác nhau nên biến “a” ngoài hàm vẫn có giá trị ban đầu sau khi truyền giá trị của nó cho biến trong hàm. Bây giờ, hãy xem ví dụ về các loại tham chiếu bên dưới để làm rõ hơn

    ví dụ về loại tham chiếu với chức năng

    Trường hợp tương tự với ví dụ về loại giá trị, nhưng bây giờ tôi tạo một mảng là một trong các loại tham chiếu trong Javascript và chuyển mảng đó cho hàm của tôi. Bây giờ, khi chúng ta gọi hàm, giá trị của mảng được truyền cho một mảng biến mới trong tham số, nhưng dựa trên định nghĩa “truyền theo tham chiếu”, giá trị của mảng này thực sự chỉ là một tham chiếu đến một vị trí bộ nhớ chứa các số được gán. Vì vậy, bây giờ, mặc dù hai biến này không liên quan đến nhau nhưng cả hai đều giữ cùng một giá trị tham chiếu. Khi tôi cố gắng thay đổi giá trị bên trong hàm, thì mảng sẽ tham chiếu đến giá trị tham chiếu của nó trong bộ nhớ và thay đổi nó. Vì, mảng bên ngoài hàm giữ cùng một tham chiếu, khi chúng ta ghi lại giá trị, nó sẽ lại tham chiếu đến tham chiếu đó, nhưng bây giờ chúng ta nhận được giá trị cập nhật vì trong hàm chúng ta đã thay đổi nó rồi

    Tại sao họ quan trọng để biết?

    Vì vậy, đối với phần cuối cùng, đầu tiên tôi sẽ cố gắng tóm tắt những gì chúng ta đã học được cho đến nay. Loại giá trị là loại dữ liệu chứa giá trị mà chúng ta gán cho chúng. Ngoài ra, loại tham chiếu là loại dữ liệu chứa tham chiếu bộ nhớ nơi đặt giá trị được gán. Vì vậy, việc hiểu các loại này về cơ bản giúp bạn nhận thức rõ hơn về giá trị hiện tại của biến, đặc biệt khi làm việc với các loại tham chiếu. Do đó, tôi sẽ thêm một ví dụ cuối cùng về các loại tham chiếu, nơi rất có thể chúng ta sẽ gặp khó khăn trong việc gỡ lỗi tại sao giá trị không giống như mong đợi của chúng ta

    ví dụ về loại tham chiếu bằng cách sử dụng các đối tượng

    Trước hết, bạn có thể nhận thấy trong ví dụ về tất cả các loại tham chiếu của tôi, tôi đang sử dụng từ khóa const để giữ giá trị biến của mình không bị gán lại. Đây cũng là một số cách thực hành tốt nhất khi làm việc với các loại tham chiếu, bởi vì trong hầu hết các trường hợp, chúng tôi không muốn thay đổi tham chiếu mà chỉ thay đổi giá trị bên trong tham chiếu đó. Tiếp tục với ví dụ của tôi ở trên, tôi đang gán giá trị của obj2 với tham chiếu từ obj1. Do đó, khi chúng ta thay đổi giá trị thuộc tính của obj2 thì thuộc tính tương tự cũng sẽ được thay đổi trong obj1. Vì vậy, để ngăn giá trị không mong muốn từ obj1 và nếu ý định của bạn là sao chép giá trị của obj1 sang obj2, một trong những giải pháp là bạn có thể sử dụng cú pháp Javascript mới, toán tử trải rộng để sao chép tất cả nội dung obj1 sang obj2 và làm cho obj2 có nó

    toán tử trải rộng đang hoạt động

    Và có bài đăng của tôi về các loại tham chiếu và giá trị, tôi biết rằng tôi không thể đề cập đến tất cả các trường hợp khác nhau liên quan đến chủ đề này, vì vậy tôi hy vọng bằng cách đọc bài đăng này sẽ giúp bạn tìm hiểu một số điều cơ bản và khiến bạn muốn thực hiện

    Kiểu mảng có phải là kiểu tham chiếu không?

    Mảng, bản thân nó được bắt nguồn từ Hệ thống. Vật. Điều này có nghĩa là tất cả các mảng luôn là kiểu tham chiếu được phân bổ trên vùng nhớ được quản lý và biến của ứng dụng của bạn chứa tham chiếu đến mảng chứ không phải chính mảng đó.

    Các loại tham chiếu trong JavaScript là gì?

    Giá trị tham chiếu. JavaScript cung cấp ba loại giá trị Tham chiếu bao gồm Mảng, Đối tượng và Hàm . Kích thước của một giá trị tham chiếu là động do đó Nó được lưu trữ trên Heap.

    Mảng nguyên thủy hay tham chiếu?

    Không, mảng không phải là kiểu dữ liệu nguyên thủy trong Java . Chúng là các đối tượng chứa được tạo động. Tất cả các phương thức của lớp Đối tượng có thể được gọi trên một mảng. Chúng được coi là kiểu dữ liệu tham chiếu.

    Mảng có thể chứa các loại tham chiếu không?

    Một biến duy nhất của kiểu mảng có thể chứa tham chiếu đến các mảng có độ dài khác nhau , vì độ dài của mảng không thuộc kiểu của nó. Nếu một biến mảng v có kiểu A [] , trong đó A là kiểu tham chiếu, thì v có thể giữ tham chiếu đến một thể hiện của bất kỳ kiểu mảng nào B [] , miễn là B có thể được gán cho A [§5. 2].

Chủ Đề