Pertanyaan ini semua tentang Semantik
Jika saya memberi Anda data ini: 12
apa jenisnya? Anda tidak memiliki cara untuk mengetahui dengan pasti. Bisa berupa bilangan bulat - bisa jadi pelampung - bisa berupa string. Dalam pengertian itu sangat banyak data "tidak diketik".
Jika saya memberi Anda bahasa imajiner yang memungkinkan Anda menggunakan operator seperti "tambah", "kurangi", dan "gabungkan" pada data ini dan beberapa bagian data lain yang sewenang-wenang, "tipe" agak tidak relevan (dengan bahasa imajiner saya) (contoh : mungkin add(12, a)
menghasilkan 109
yang 12
ditambah nilai ascii dari a
).
Mari kita bicara C sebentar. C cukup banyak memungkinkan Anda melakukan apa pun yang Anda inginkan dengan sepotong data yang sewenang-wenang. Jika Anda menggunakan fungsi yang mengambil dua uint
s - Anda dapat melakukan dan melewatkan apa pun yang Anda inginkan - dan nilai-nilai hanya akan ditafsirkan sebagai uint
s. Dalam pengertian itu C "tidak diketik" (jika Anda memperlakukannya sedemikian rupa).
Namun - dan sampai pada poin Brendan - jika saya katakan bahwa "Umur saya 12
" - maka 12
ada jenisnya - setidaknya kita tahu ini numerik. Dengan konteks semuanya memiliki tipe - terlepas dari bahasa.
Inilah sebabnya saya katakan di awal - pertanyaan Anda adalah semantik. Apa arti dari "tidak diketik"? Saya pikir Brendan memukul paku di kepala ketika dia berkata "tidak ada tipe statis" - karena hanya itu yang bisa berarti. Manusia secara alami mengklasifikasikan sesuatu menjadi tipe. Kita secara intuitif tahu bahwa ada sesuatu yang secara fundamental berbeda antara mobil dan monyet - tanpa pernah diajarkan untuk membuat perbedaan itu.
Kembali ke contoh saya di awal - bahasa yang "tidak peduli dengan jenis" (per-se) dapat membuat Anda "menambahkan" "usia" dan "nama" tanpa menghasilkan kesalahan sintaksis ... tetapi itu tidak berarti ini adalah operasi yang logis.
Javascript memungkinkan Anda melakukan segala macam hal gila tanpa menganggapnya "kesalahan". Itu tidak berarti apa yang Anda lakukan adalah logis. Thats bagi pengembang untuk berolahraga.
Apakah sistem / bahasa yang tidak menerapkan keamanan jenis pada waktu kompilasi / bangun / interpretasi "tidak diketik" atau "diketik secara dinamis"?
Semantik.
EDIT
Saya ingin menambahkan sesuatu di sini karena beberapa orang tampaknya terjebak pada "yeah, tetapi Javascript memang memiliki beberapa" tipe "".
Dalam komentar saya tentang jawaban orang lain saya katakan:
Dalam Javascript saya dapat memiliki objek yang saya bangun untuk menjadi "Monyet" dan objek yang saya bangun untuk menjadi "Manusia" dan beberapa fungsi dapat dirancang untuk beroperasi hanya pada "Manusia", yang lain hanya pada "Monyet", dan yang lain hanya pada "Things With Arms". Apakah bahasa tersebut pernah diberitahu atau tidak ada kategori objek seperti "benda dengan senjata" sama tidak relevannya dengan perakitan ("tidak diketik") seperti halnya dengan Javascript ("dinamis"). Ini semua masalah integritas logis - dan satu-satunya kesalahan adalah menggunakan sesuatu yang tidak memiliki senjata dengan metode itu.
Jadi, jika Anda menganggap Javascript memiliki "gagasan tipe" secara internal - dan, karenanya "tipe dinamis" - dan berpikir ini entah bagaimana "sangat berbeda dari sistem yang tidak diketik" - Anda harus melihat dari contoh di atas bahwa "gagasan tentang" jenis "itu secara internal benar-benar tidak relevan.
Untuk melakukan operasi yang sama dengan C #, misalnya, saya PERLU antarmuka yang disebut ICreatureWithArms
atau sesuatu yang serupa. Tidak demikian dalam Javascript - tidak demikian dalam C atau ASM.
Jelas, apakah Javascript memiliki pemahaman tentang "tipe" atau tidak sama sekali tidak relevan.