Чего не хватает в Javascript? - PullRequest
1 голос
/ 12 июля 2009

Javascript - невероятный язык, а библиотеки, такие как jQuery, делают его почти слишком простым в использовании.

Что должны были включить в язык оригинальные дизайнеры Javascript или что мы должны подталкивать их к добавлению в будущие версии?

Вещи, которые я хотел бы увидеть: -

  • Какая-то скомпилированная версия языка, поэтому мы, программисты, можем уловить больше наших ошибок раньше, а также предоставить более быстрое решение для использования браузерами.
  • необязательные строгие типы (например, возможность объявить var как float и сохранить его таким образом).

Я не эксперт по Javascript, так что, возможно, они уже существуют, но что еще там должно быть? Есть ли какие-нибудь убийственные функции других языков программирования, которые вы хотели бы увидеть?

Ответы [ 7 ]

5 голосов
/ 12 июля 2009

Одна вещь, к которой я всегда стремился и к чему стремился, это некоторая поддержка хеширования . В частности, позвольте мне отследить метаданные об объекте без необходимости добавлять свойство expando для этого объекта .

Java предоставляет Object.getHashCode(), который по умолчанию использует базовый адрес памяти; Python предоставляет id(obj) для получения адреса памяти и hash(obj) для настройки; и т.д. Javascript ничего не предоставляет ни для одного.

Например, я пишу библиотеку Javascript, которая пытается незаметно и изящно улучшить некоторые объекты, которые вы мне даете (например, ваши

элементы или даже что-то, не связанное с DOM). Допустим, мне нужно обработать каждый объект ровно один раз. Поэтому после того, как я обработал каждый объект, мне нужен способ «пометить его» как видимый.

В идеале я мог бы создать свою собственную хеш-таблицу или установить (в любом случае, реализованный в виде словаря) для отслеживания:

var processed = {};

function process(obj) {
    var key = obj.getHashCode();

    if (processed[key]) {
        return;    // already seen
    }

    // process the object...

    processed[key] = true;
}

Но так как это не вариант, я должен прибегнуть к добавлению свойства для каждого объекта:

var SEEN_PROP = "__seen__";

function process(obj) {
    if (obj[SEEN_PROP]) {    // or simply obj.__seen__
        return;    // already seen
    }

    // process the object...

    obj[SEEN_PROP] = true;   // or obj.__seen__ = true
}

Но эти объекты не мои , так что это делает мой сценарий навязчивым. Эта техника, по сути, является хакерской, чтобы обойти тот факт, что я не могу получить надежный хеш-ключ для любого произвольного объекта.

Другой обходной путь - создание объектов-обёрток для всего, но часто вам нужен способ перехода от исходного объекта к объекту-обёртке, который в любом случае требует свойства expando для исходного объекта. Кроме того, это создает циклическую ссылку, которая вызывает утечку памяти в IE, если исходный объект является элементом DOM, поэтому это не безопасная кросс-браузерная техника.

Для разработчиков библиотек Javascript это повторяющаяся проблема.

5 голосов
/ 12 июля 2009

Читать Javascript: The Good Parts от автора JSLint , Дуглас Крокфорд Это действительно впечатляет, и охватывает также плохие детали.

1 голос
/ 23 июля 2009

Есть несколько мелочей, которые могут сделать лучше.

Выбор + для конкатенации строк был ошибкой. & было бы лучше.

Может быть неприятно, что for( x in list ) перебирает индексы, поскольку затрудняет использование литерального массива. Более новые версии имеют решение.

Правильное определение объема было бы неплохо. v1.7 добавляет это, но выглядит неуклюже.

Способ создания «частных» и «защищенных» переменных в объекте немного неясен, и его трудно запомнить, поскольку он использует преимущества замыканий и их влияние на область видимости. Некоторый синтаксический сахар, скрывающий механику этого, был бы невероятен.

Если честно, многие проблемы, над которыми я обычно сталкиваюсь, на самом деле являются причудами DOM, а не JavaScript как таковыми. Другая большая проблема, конечно, заключается в том, что в последних версиях JavaScript есть интересные и полезные вещи, такие как генераторы. К сожалению, большинство браузеров застряли на 1,5. По-видимому, впереди только FireFox.

1 голос
/ 12 июля 2009

В Javascript отсутствует имя, которое отличает его от языка, на который это не похоже.

1 голос
/ 12 июля 2009

Что должны были включить в язык оригинальные дизайнеры Javascript или что мы должны подталкивать их к добавлению в будущие версии?

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

1 голос
/ 12 июля 2009

Возможность использовать массивы / объекты в качестве ключей без приведения строк может быть хорошей.

0 голосов
/ 12 июля 2009

File IO отсутствует .... хотя некоторые скажут, что это на самом деле не нужно ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...