Как зафиксировать Массив indexOf () в JavaScript для браузеров Internet Explorer

John, которого пример кода Статистика не показывает функциональному программированию, потому что при выполнении функционального программирования ключ - то, что код делает уроки (record = thingConstructor(t) присвоение), и оно не имеет НИКАКИХ ПОБОЧНЫХ ЭФФЕКТОВ (localMap.put(record), оператор с побочным эффектом). В результате этих двух ограничений все, что делает функция , полностью получено ее аргументами и ее возвращаемым значением. Перезапись кода Статистика путем, это должно было бы посмотреть, если бы Вы хотели эмулировать функциональный язык с помощью C++:

RT getOrCreate(const T thing, 
                  const Function<RT<T>> thingConstructor, 
                  const Map<T,RT<T>> localMap) {
    return localMap.contains(t) ?
        localMap.get(t) :
        localMap.put(t,thingConstructor(t));
}

В результате никакого правила побочных эффектов, каждый оператор является частью возвращаемого значения (следовательно return, прибывает первый ), и каждый оператор является выражением. На языках, которые осуществляют функциональное программирование, return, ключевое слово подразумевается, и , если оператор ведет себя как C++ ?: оператор.

кроме того, все неизменно, таким образом localMap.put должен создать новую копию localMap и возвратить его, вместо того, чтобы изменить оригинал localMap , способ, которым были бы нормальный C++ или программа Java. В зависимости от структуры localMap копия могла снова использовать указатели в оригинал, уменьшив объем данных, который должен быть скопирован.

Некоторые преимущества функционального программирования включают то, что функциональные программы короче, и легче изменить функциональную программу (потому что нет никаких скрытых глобальных эффектов принять во внимание), и легче разобраться в программе во-первых.

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

более популярные функциональные языки имеют действительно, действительно строгие системы типов. В OCAML Вы не можете даже смешать целочисленную и математику с плавающей точкой или использовать те же операторы (+, для добавления целых чисел, +. для добавления плаваний). Это может быть или преимуществом или недостатком, в зависимости от того, как высоко Вы оцениваете способность средства проверки типа поймать определенные виды ошибок.

Функциональные языки также имеют тенденцию иметь действительно большие среды выполнения. Haskell является исключением (исполняемые файлы GHC являются почти столь же маленькими как C программы, и во время компиляции и время выполнения), но SML, язык Common LISP и программы Схемы всегда требуют тонн памяти.

294
задан Peter Mortensen 11 February 2014 в 08:30
поделиться

2 ответа

Сделайте это вот так ...

if (!Array.prototype.indexOf) {

}

В соответствии с совместимостью, рекомендованной MDC .

В общем, код обнаружения браузера - большой недостаток.

213
ответ дан 23 November 2019 в 01:37
поделиться

Вы должны проверить, если это не определено с помощью if (! Array.prototype.indexOf) .

Кроме того, ваша реализация indexOf неверна. Вы должны использовать === вместо == в вашем if (this [i] == obj) , иначе [4, " 5 "]. IndexOf (5) будет равно 1 в соответствии с вашей реализацией, что неверно.

Я рекомендую вам использовать реализацию на MDC .

10
ответ дан 23 November 2019 в 01:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: