Этот вопрос все о семантике
Если я дам вам эти данные: 12
что это за тип? Вы не можете знать наверняка. Может быть целым числом - может быть плавающей точкой - может быть строкой. В этом смысле это очень «нетипизированные» данные.
Если я даю вам воображаемый язык, который позволяет вам использовать операторы, такие как «сложение», «вычитание» и «сцепление», для этих данных и некоторых других произвольных фрагментов данных, «тип» несколько не имеет значения (для моего воображаемого языка) (пример : возможно , add(12, a)
выходы 109
которых является 12
плюс значение ASCII из a
).
Давайте поговорим C на секунду. C в значительной степени позволяет вам делать что угодно с любым произвольным фрагментом данных. Если вы используете функцию, которая принимает два uint
с - вы можете привести и передать все, что вы хотите - и значения будут просто интерпретироваться какuint
s. В этом смысле C «нетипизирован» (если вы относитесь к нему таким образом).
Однако - и, если говорить о точке зрения Брендана, - если я скажу вам, что «мой возраст 12
», - тогда 12
есть тип - по крайней мере, мы знаем, что он числовой. С контекстом у всего есть тип - независимо от языка.
Вот почему я сказал в начале - ваш вопрос - один из семантики. Что означает «нетипизированный»? Я думаю, что Брендан ударил по гвоздю в голову, когда сказал «нет статических типов» - потому что это все, что это может означать. Люди естественно классифицируют вещи по типам. Мы интуитивно знаем, что между автомобилем и обезьяной есть что-то принципиально иное, и нас никогда не учили проводить такие различия.
Возвращаясь к моему примеру в начале - язык, который «не заботится о типах» (per se), может позволить вам «добавить» «возраст» и «имя», не вызывая синтаксической ошибки ... но это не означает, что это логически обоснованная операция.
Javascript может позволять вам делать всякие сумасшедшие вещи, не считая их «ошибками». Это не значит, что то, что вы делаете, логично. Это для разработчика, чтобы работать.
Является ли система / язык, который не обеспечивает безопасность типов во время компиляции / сборки / интерпретации, «нетипизированной» или «динамически типизированной»?
Семантика.
РЕДАКТИРОВАТЬ
Я хотел бы добавить кое-что здесь, потому что некоторые люди, кажется, догоняют «да, но у Javascript есть некоторые« типы »».
В своем комментарии к чужому ответу я сказал:
В Javascript у меня могли быть объекты, которые я построил, чтобы быть «Обезьянами», и объекты, которые я создал, чтобы быть «Людьми», и некоторые функции могли быть предназначены для работы только с «Людьми», другие - только с «Обезьянами», и третьи только на «Вещи с оружием». Независимо от того, говорилось ли когда-либо языку, существует ли такая категория объектов, как «вещи с оружием», не имеет значения для сборки («нетипизированный»), как для Javascript («динамический»). Это все вопрос логической целостности - и единственной ошибкой было бы использование чего-то, что не имело оружия с этим методом.
Итак, если вы считаете, что Javascript имеет некоторое внутреннее «представление о типах» и, следовательно, «динамические типы», и думаете, что это как-то «заметно отличается от нетипизированной системы», вы должны увидеть из приведенного выше примера, что любое «понятие Типы "это имеет внутренне действительно не имеет значения.
Например, чтобы выполнить ту же операцию с C #, мне нужен интерфейс ICreatureWithArms
или нечто подобное. Не так в Javascript - не так в C или ASM.
Понятно, имеет ли Javascript какое-либо понимание «типов» вообще не имеет значения.