Câu hỏi này là tất cả về ngữ nghĩa
Nếu tôi cung cấp cho bạn dữ liệu này: 12
đó là loại gì? Bạn không có cách nào để biết chắc chắn. Có thể là một số nguyên - có thể là một số float - có thể là một chuỗi. Theo nghĩa đó, nó rất nhiều dữ liệu "được tháo gỡ".
Nếu tôi cung cấp cho bạn một ngôn ngữ tưởng tượng cho phép bạn sử dụng các toán tử như "thêm", "trừ" và "nối" trên dữ liệu này và một số dữ liệu tùy ý khác thì "loại" có phần không liên quan (với ngôn ngữ tưởng tượng của tôi) (ví dụ : có lẽ add(12, a)
sản lượng 109
mà là 12
cộng với giá trị ascii của a
).
Hãy nói chuyện C một chút. C khá nhiều cho phép bạn làm bất cứ điều gì bạn muốn với bất kỳ phần dữ liệu tùy ý. Nếu bạn đang sử dụng một hàm mất hai uint
giây - bạn có thể truyền và vượt qua bất cứ thứ gì bạn muốn - và các giá trị sẽ chỉ được hiểu là uint
s. Theo nghĩa đó, C là "cởi trói" (nếu bạn đối xử với nó theo cách như vậy).
Tuy nhiên - và đi đến quan điểm của Brendan - nếu tôi nói với bạn rằng "Tuổi của tôi là 12
" - thì 12
có một loại - ít nhất là chúng ta biết đó là số. Với bối cảnh mọi thứ đều có một loại - bất kể ngôn ngữ.
Đây là lý do tại sao tôi đã nói lúc đầu - câu hỏi của bạn là một trong những ngữ nghĩa. Ý nghĩa của "cởi trói" là gì? Tôi nghĩ Brendan đã bắn đinh vào đầu khi anh ta nói "không có loại tĩnh" - bởi vì đó là tất cả những gì nó có thể có nghĩa. Con người tự nhiên phân loại mọi thứ thành các loại. Chúng ta trực giác biết rằng có một cái gì đó khác biệt cơ bản giữa một chiếc xe và một con khỉ - mà không bao giờ được dạy để tạo ra những sự khác biệt.
Trở lại ví dụ của tôi ngay từ đầu - một ngôn ngữ "không quan tâm đến các loại" (per-se) có thể cho phép bạn "thêm" "tuổi" và "tên" mà không gây ra lỗi cú pháp ... nhưng điều đó không có nghĩa đó là một hoạt động hợp lý.
Javascript có thể cho phép bạn làm tất cả các loại điều điên rồ mà không coi chúng là "lỗi". Điều đó không có nghĩa là những gì bạn đang làm là hợp lý. Đó là cho các nhà phát triển để làm việc ra.
Là một hệ thống / ngôn ngữ không thực thi an toàn loại tại thời gian biên dịch / xây dựng / giải thích "được tháo ra" hoặc "gõ động"?
Ngữ nghĩa.
BIÊN TẬP
Tôi muốn thêm một cái gì đó ở đây vì một số người dường như bị cuốn vào "vâng, nhưng Javascript có một số" loại ".
Trong nhận xét của tôi về câu trả lời của người khác, tôi nói:
Trong Javascript, tôi có thể có các đối tượng tôi đã xây dựng thành "Khỉ" và các đối tượng tôi đã xây dựng thành "Con người" và một số chức năng có thể được thiết kế để chỉ hoạt động trên "Con người", các đối tượng khác chỉ có "Khỉ" và còn những người khác chỉ trên "Things With Arms". Có hay không ngôn ngữ đã từng được nói có một loại đối tượng như "vật có cánh tay" không liên quan đến lắp ráp ("tháo gỡ") như đối với Javascript ("động"). Tất cả chỉ là vấn đề về tính toàn vẹn logic - và lỗi duy nhất sẽ là sử dụng thứ gì đó không có vũ khí với phương pháp đó.
Vì vậy, nếu bạn coi Javascript có một số "khái niệm về loại" bên trong - và, do đó là "loại động" - và nghĩ rằng đây là "khác biệt rõ ràng với một hệ thống chưa được xử lý" - bạn sẽ thấy từ ví dụ trên rằng bất kỳ "khái niệm nào về" loại "nó có nội bộ thực sự không liên quan.
Ví dụ, để thực hiện thao tác tương tự với C #, tôi CẦN một giao diện được gọi ICreatureWithArms
hoặc một cái gì đó tương tự. Không phải như vậy trong Javascript - không phải như vậy trong C hoặc ASM.
Rõ ràng, việc Javascript có hay không có bất kỳ sự hiểu biết nào về "các loại" đều không liên quan.