Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #31 (permalink)  
Старый 21.11.2014, 22:29
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

вот в этом посте я привел в пример библиотеку, которая все это учитывает, более подробно о ней можно почитать тут: Мини библиотека для контроля ввода текста в TEXTAREA / INPUT
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #32 (permalink)  
Старый 21.11.2014, 22:40
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

Сообщение от devote
ну было бы странно если бы он работал быстрее.. Он же на каждую итерацию вызывает функцию, а вызов функции пожирает большие ресурсы.
Навряд ли в этом дело. Скорей, в кривости реализации.
Array.prototype.foreach=function(f){
   for(var i=0; i<this.length; i++) f(this[i])
}

arr=[]
i=10000
while(i--){arr.push(i)}

tst=function(x){return x + 1}
console.time("forEach")
arr.forEach(tst)
console.timeEnd("forEach")
console.time("foreach")
arr.foreach(tst)
console.timeEnd("foreach")

// forEach: 58ms
// foreach: 1ms
Ответить с цитированием
  #33 (permalink)  
Старый 22.11.2014, 00:07
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от krutoy
Скорей, в кривости реализации.
не в кривости а в требованиях, оригинальная реализация выглядит примерно так:
Array.prototype.foreach = function (callback, thisArg) {

  var T, k;

  if (this == null) {
    throw new TypeError(' this is null or not defined');
  }

  // 1. Положим O равным результату вызова ToObject passing the |this| value as the argument.
  var O = Object(this);

  // 2. Положим lenValue равным результату вызова внутреннего метода Get объекта O с аргументом "length".
  // 3. Положим len равным ToUint32(lenValue).
  var len = O.length >>> 0;

  // 4. Если IsCallable(callback) равен false, выкинем исключение TypeError.
  // Смотрите: [url]http://es5.github.com/#x9.11[/url]
  if (typeof callback !== 'function') {
    throw new TypeError(callback + ' is not a function');
  }

  // 5. Если thisArg присутствует, положим T равным thisArg; иначе положим T равным undefined.
  if (arguments.length > 1) {
    T = thisArg;
  }

  // 6. Положим k равным 0
  k = 0;

  // 7. Пока k < len, будем повторять
  while (k < len) {

    var kValue;

    // a. Положим Pk равным ToString(k).
    //   Это неявное преобразование для левостороннего операнда в операторе in
    // b. Положим kPresent равным результату вызова внутреннего метода HasProperty объекта O с аргументом Pk.
    //   Этот шаг может быть объединён с шагом c
    // c. Если kPresent равен true, то
    if (k in O) {

      // i. Положим kValue равным результату вызова внутреннего метода Get объекта O с аргументом Pk.
      kValue = O[k];

      // ii. Вызовем внутренний метод Call функции callback с объектом T в качестве значения this и
      // списком аргументов, содержащим kValue, k и O.
      callback.call(T, kValue, k, O);
    }
    // d. Увеличим k на 1.
    k++;
  }
  // 8. Вернём undefined.
};
 
arr=[]
i=10000
while(i--){arr.push(i)}
 
tst=function(x){return x + 1}
console.time("forEach")
arr.forEach(tst)
console.timeEnd("forEach")
console.time("foreach")
arr.foreach(tst)
console.timeEnd("foreach")

//  Chrome: 
//    forEach: 1.000ms
//    foreach: 1.000ms
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #34 (permalink)  
Старый 22.11.2014, 09:30
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от klk.pma
Number не во всех браузерах работает
Во всех. Даже в IE5.5
Сообщение от krutoy
Да не, они просто домохались до for in, якобы, он медленный
Дело не в скорости. Дело в говнистости кода ) Говнокодерам без разницы как писать.

Для наитупейшего обхода элементов массива задействовать машину регулярных выражений - это победа .
__________________
В личку только с интересными предложениями

Последний раз редактировалось danik.js, 22.11.2014 в 09:36.
Ответить с цитированием
  #35 (permalink)  
Старый 22.11.2014, 10:25
Интересующийся
Отправить личное сообщение для klk.pma Посмотреть профиль Найти все сообщения от klk.pma
 
Регистрация: 30.06.2014
Сообщений: 23

Сообщение от danik.js Посмотреть сообщение
Во всех. Даже в IE5.5 .
С каких это пор html5 работает в ie5 и уж тем более в ie 5.5 ))
Ответить с цитированием
  #36 (permalink)  
Старый 23.11.2014, 10:38
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Сообщение от klk.pma
Если есть один input, то это можно реализовать через это:
Через это

form.addEventListener('input',validate);

и вперде

в инпуте есть тип - тот самый number. Если брауз - копенгаген, то все само будет работать, а если туп - то вы берете getAttribute('type') и получаете number и, соответственно, проверяете по своему любимому паттерну.

Это геморройный способ сугубой сраной оптимизации. Легкая избыточность данных существенно все облегчает - х на type, он вообще может быть любым - пишите в pattern свой паттерн и JS вам проверит все что угодно по этому паттерну. Ну, если бразуер тупит.
Ответить с цитированием
  #37 (permalink)  
Старый 23.11.2014, 10:47
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Так вот, у меня тоже есть вопрос - а возможно ли перевести взад на человеческий язык криптографию регулярного выражения?

Например

if(len && input.pattern && !new RegExp(input.pattern).test(value))
	throw 'Здесь '+input.errmsg;


Чтобы сообщить что-то осмысленное, а не просто типа "введите перпендикулярно", приходится в том же месте откуда берутся паттерны задавать сообщения об ошибках проверки по паттерну - errmsg.

А было бы круто чтобы программа сама, разобралась в требованиях шаблона проверки и написала, типа: Здесь минимум 3 символа, которые должны быть все печатными.
Ответить с цитированием
  #38 (permalink)  
Старый 23.11.2014, 10:58
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

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

Понятно откуда ноги воняют? На фронтире, типа, усе сразу получить _правильно_ и тогда налаживать обратную связь и не надо. Лафа!

Так вот вполне понятно что без всякого текстового поля можно обойтись и захерачить ему какие хочешь нахуй буквы вместо цифр и посмотреть как сервер чмокнет.

ЗЫ Не должен js заниматься санитарией. Потому что обойти его ленточки - как два пальца об асфальт. Вся санитария будет только на сервере, который и сообщит что юзер ввел не перпедикулярно. JS может только проверить и написать что ввели хуйню, по сему факту задизаблить сабмит формы и все такое. Но корежить данные - не должен. Что отправилось - на то сервер только отвечает.

Последний раз редактировалось kostyanet, 23.11.2014 в 11:04.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пользовательская функция для графиков aleksey.danchin Общие вопросы Javascript 1 15.06.2014 13:22
AJAX функция для новых html-элементов broadcast77 AJAX и COMET 25 03.03.2014 14:01
поиск классов внутри тега yozuul jQuery 24 14.06.2013 22:00
как прописать условия для полей input и textarea Nailya Общие вопросы Javascript 12 06.06.2013 16:48
Функция onclick для созданных потомков Groonel Общие вопросы Javascript 6 24.04.2009 18:35