Раньше были данные конкретного типа и был интерес их обрабатывать с целью получения результата. Господство «нетипичных идей в сфере описания» наступило неожиданно, но естественно. Предварительное объявление переменной перестало быть обязательным, а указание ее типа вообще потеряло всякий смысл, во всяком случае до операции, в которой она принимает участие.
Программист развязал себе руки: совершенно не обязательно объявлять что-то вначале. Часто только к моменту использования будет определенность, что брать, что делать и как. Что касается типов, то они сами по себе «стали значениями», то есть стали данными, от которых тоже что-то зависит!
Ее еще или уже нет, ну и что из того
Очень простое описание переменной "aaa" и доступный алгоритм ее обработки:
var aaa;
if (aaa) {
Res = 'I am!'; // Я ЕСТЬ!
} else {
Res = 'me no...'; // меня нету
}
даст очевидный результат: «меня нет». Здесь значение функции JavaScript typeof = undefined. Просто описать переменную - «вовсе ничего» не означает. Разумеется, когда aaa = 1, мы получим: «Я ЕСТЬ!», но если aaa = 0, то будет как и в первом случае: «меня нет...». Чудесная логика, иной математик, а также простой гражданин, не мог и подумать, что нулевое значение имеет совершенно иной смысл, нежели реальный. Только современное (нетипичное) программирование способно на такие смелые идеи!
Конструкция JavaScript typeof, как и более интеллигентное выражение if (aaa) { ...x... } else { ...y... }, имеет прекрасные потребительские качества и очень удобна в использовании.
Об особенностях кириллицы и латиницы
Профессиональный программист всегда предпочтет английское начертание символов русскому, душевно благодаря тот этап развития программирования, когда на одних просторах кибернетика не была признана, зато на других территориях компьютерное дело уверенно пошло в гору. Начали множиться и развиваться языки программирования, взяв за основу синтаксиса 26 букв английского алфавита и комплект прочих общепринятых символов.
Самым простым и естественным стал машинный код, он был прекрасен, совершенен, но специфичен на каждой архитектуре, а на языках высокого уровня идея переносимости между архитектурами сразу стала актуальной. Это существенно противоречит текущему моменту: оснований для аналога JavaScript typeof = undefined | string | number | boolean | object | function тогда просто не было. Все языки были строго формальны, имели строгий синтаксис и не допускали неопределенности.
Типы, переменные и их использование
Момент очень важен. Типизация и описание переменных - важнейшая составляющая программы, программист не может написать работающий алгоритм, пока не уложит реальное многообразие данных в строгую формальную картину переменных, массивов, объектов и функций.
JavaScript несет в себе всю накопленную за десятилетия функциональную мощь, все его конструкции идеально отражают современные представления о синтаксисе и целесообразных правилах уложения в него семантики.
Вопрос в том, когда это следует делать, когда именно нужно определить type text, JavaScript typeof функцией. Собственно чистых вариантов type text немного: символ, строка и число. Однако роль текста может играть и объект, и даже массив с конструкцией array.join(), которая соединяет все его элементы в единый text, то есть в одну строку.
Банальное утверждение: все кругом есть type text, и JavaScript typeof функция должна в нужное время выполнить нужное определение типа. Это так, но на практике все получается иначе. JavaScript typeof object выдаст одно и то же значение во всех трех случаях:
var aaa = {};
Res = typeof(aaa);
Res += '/' + typeof window.document;
Res += '/' + typeof(document.forms[0]);
результат: object/object/object
Использование функции может быть в формате typeof(aaa) и формате typeof aaa - это не существенно, однако во всех вариантах ответ дан, но он ровным счетом ничего не значит!
Неопределенность переходит в определенность
Программированию свойственна особенная динамика: оно столь стремительно летит вперед, что шкала движения непрерывно расширяется. Счет идет на месяцы, недели или дни, а порой даже на часы. В конкретных задачах динамика формирования алгоритма решения столь стремительна и требовательна к непрерывности, что выход программиста из рабочего состояния может отбросить решение на день, неделю и больший срок.
Естественное решение JavaScript typeof и практика объектно-ориентированного программирования, которое в данном синтаксисе несколько отличается от сложившегося в смежных современных языках, переносит центр тяжести на объект. Очень характерный момент: язык становится конструкцией, содержащей семантику, а не набором синтаксических норм.
Простые типы данных не нуждаются в определении своего типа, точнее использование JavaScript typeof вполне достаточно. В случае надобности среда исполнения сама заботится о надлежащих преобразованиях, но в отношении объектов JavaScript typeof дает самый разумный ответ: это объект и проблема его типа - его забота! Такая логика для классического представления о программировании трудно воспринимаема, но это реальное положение правильных вещей.
Забота объекта - определить свой тип, проявить свои свойства и выполнять свои методы. Программирование отшлифовало свой синтаксис и с каждым моментом времени переносит центр тяжести из синтаксиса в формируемую программистом семантику: систему его объектов, которые выполняют решение поставленной задачи.