Проблема, которая смущает многих программистов, состоит в том, что подобные определения где-то не стандартизированы. Термин нетипизированный язык программирования неоднозначен. Относится ли это к языку, у которого нет типов данных или к языку с лямбда-исчислением нетипизированный вариант ?
JavaScript / ECMAScript имеет систему типов , и все домены его функций будут принимать любой тип спецификации Reference. Это означает, что в действительности JavaScript имеет один тип данных. Это вопрос реализации, который более важен для очень продвинутых программистов на JavaScript. Средний программист JavaScript заботится только о языковых типах данных abstract , которые были определены ECMAScript.
В контексте обычного программиста, а не исследователя или теоретика-информатика, термин нетипизированный является неправильным, потому что большинство людей не делают лямбда-исчисление. Таким образом, этот термин сбивает с толку массы и, кажется, заявляет, что в JavaScript нет типов данных, что просто неверно. Любой, кто когда-либо использовал typeof
, знает, что JavaScript имеет свои собственные языковые типы данных:
var test = "this is text";
typeof(test);
выходы
"строка"
ECMAScript определяет следующие типы для языка: undefined
, null
, string
, boolean
, number
, object
http://www.ecma -international.org / публикации / файлы / ECMA-ST / ECMA-262.pdf
Более точное обозначение для JavaScript будет неявно типизированным, динамически типизированным или слабо / слабо типизированным (или некоторой их комбинацией), поскольку JavaScript использует в некоторых случаях приведение типа , что делает тип неявным, поскольку вам не нужно явно указывать тип ваших переменных. Он подпадает под слабо типизированный, потому что, в отличие от некоторых языков, которые различают float и integer и т. Д., Он просто использует один тип number
для охвата всех чисел и использует приведенное выше приведение типа [Раздел 9 ECMAScript Spec] , в отличие от строго типизированного языка, который будет иметь очень специфические типы данных (т. Е. Вам придется указать int
или float
).
Определения статически и динамически типизированных языков не стандартизированы, однако также не было размера байта, когда компьютеры начали развиваться. Статическая и динамическая типизация чаще всего относятся к наличию определенных языковых функций. Одним из них является проверка типов во время выполнения , или то, что называется динамическая проверка типов . Если вы использовали JavaScript, вы уже знаете, что он определенно ждет времени выполнения для проверки типов, поэтому вы получаете TypeError
исключений во время выполнения вашего кода. Пример здесь
Я думаю, что ответ с наибольшим количеством голосов сбивает с толку полиморфизм функций JavaScript с функциями, которые будут принимать буквально все (как с нетипизированными вариантами Lambda Calculus), что является Ошибка ассоциации .