2016-05-27 2 views
1

Вчера я работал над простой задачей, просто нужно было суммировать значения в нескольких раскрывающихся меню для отображения в текстовом поле через Javascript. Неожиданно это было просто построение строки, вместо того, чтобы дать мне значение 4, оно дало мне «1111». Я понимаю, что происходит; но я не понимаю как.Как плохо типизированный язык знает, как обращаться с разными типами данных?

С помощью слабо типизированного языка, такого как Javascript или PHP, как компьютер «знает», какой тип относится к чему-то? Если я просто набираю все как var, как он отличает строку от int от объекта?

ответ

1

Что делает оператор + в Javascript, определяется во время выполнения, когда известны как фактические аргументы (и их типы).

Если среда выполнения видит, что одним из аргументов является строка, она будет выполнять конкатенацию строк. В противном случае он будет делать числовое добавление (при необходимости, принуждение аргументов к числам).

Эта логика кодируется в реализацию оператора + (или любой другой функции, такой как он). Если вы посмотрите на него, вы увидите if typeof(a) === 'string' заявления (или что-то очень похожее) там.

Если я просто введите все как вар

Ну, вы не вводите его вообще. Переменная не имеет типа, но любое фактическое значение, которое попадает в эту переменную, имеет тип, и код может это проверить.

+0

Спасибо за ответ, и, возможно, я должен был выбрать мои слова более тщательно; Я имел в виду тип как глагол «набирать на клавиатуре», а не вводить в смысл программирования :) – sab669

+0

Недостатком этого является то, что если для статически типизированного языка, такого как Java, компилятор может сказать вам, что определенного типа нет определенный метод или определенный метод не принимает параметры определенного типа до того, как вы даже запустите программу, вы получите только эти ошибки во время выполнения в Javascript. – Thilo

+0

Да, я, безусловно, хорошо знаком с проблемами языка ха-ха. – sab669

Смежные вопросы