Це питання стосується семантики
Якщо я вам надам ці дані: 12
що це за тип? Ви не можете точно знати. Може бути цілим числом - може бути поплавком - може бути рядком. У цьому сенсі це дуже багато "нетипізованих" даних.
Якщо я даю вам уявну мову, яка дозволяє використовувати такі оператори, як "додавання", "віднімання" та "з'єднання" за цими даними та деякими іншими умовними фрагментами даних, "тип" дещо не має значення (для моєї уявної мови) (наприклад : можливо, add(12, a)
врожайність 109
, 12
плюс плюс до значення asciia
).
Поговоримо С на секунду. C в значній мірі дозволяє вам робити все, що завгодно, з будь-якою довільною інформацією. Якщо ви використовуєте функцію, яка займає два uint
s - ви можете передавати і передавати все, що завгодно, - і значення будуть просто інтерпретуватися як uint
s. У цьому сенсі С є "нетиповим" (якщо ставитися до цього таким чином).
Однак - і, якщо б я сказав вам, що "Мій вік 12
" - я маю 12
тип - принаймні, ми знаємо, що це число. З контекстом все має тип - незалежно від мови.
Ось чому я сказав на початку - ваше питання відноситься до семантики. Яке значення "нетипізованого"? Я думаю, що Брендан вдарив цвяхом по голові, коли сказав "немає статичних типів" - тому що це все, що це може означати. Люди природно класифікують речі за типами. Ми інтуїтивно знаємо, що між автомобілем та мавпою є щось принципово інше - не навчившись ніколи робити це.
Повернення до мого прикладу на початку - мова, яка "не хвилює типи" (per se se), може дозволити вам "додати" "вік" та "ім'я", не створюючи синтаксичну помилку ... але це не означає, що це логічно обгрунтована операція.
Javascript може дозволяти вам робити всілякі шалені речі, не вважаючи їх "помилками". Це не означає, що ви робите, це логічно здорово. Це для розробника.
Чи є система / мова, яка не застосовує безпеку типу під час компіляції / складання / інтерпретації, "нетипізована" або "динамічно набрана"?
Семантика.
EDIT
Я хотів щось тут додати, тому що, здається, деякі люди потрапляють на "так, але у Javascript є деякі" типи "".
У своєму коментарі до чужої відповіді я сказав:
У Javascript я міг би мати об'єкти, які я створив, щоб бути "Мавпами", і об'єкти, які я створив, щоб бути "Людьми", а деякі функції можна було створити для роботи лише "Людей", інші - лише для "Мавп" і інші лише на "Речі зі зброєю". Незалежно від того, про яку мову ніколи не говорили, існує така категорія об'єктів, як "речі зі зброєю", так само не має значення для складання ("нетипізовані"), як і для Javascript ("динамічний"). Це все питання логічної цілісності - і єдиною помилкою було б використання чогось, у якого не було зброї з цим методом.
Отже, якщо ви вважаєте, що у Javascript є якесь "поняття про типи" внутрішньо - і, отже, "динамічні типи" - і ви думаєте, що це якимось чином "виразно відрізняється від нетипізованої системи" - ви повинні з вищенаведеного прикладу бачити, що будь-яке "поняття про типів "у неї всередині справді не має значення".
Наприклад, щоб виконати ту саму операцію з C #, наприклад, я ПОТРІБУвав інтерфейс, що викликається ICreatureWithArms
або щось подібне. Не так у Javascript - не так у C чи ASM.
Зрозуміло, незалежно від того, чи має Javascript взагалі розуміння "типів", не має значення.