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