Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1051 (permalink)  
Старый 31.03.2015, 19:58
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от МаксимкаНевозбанный
вот самый крутой способ и самый быстрый
тесты проходит (дописал первую строчку)
var array = [1];
var arrayLike = {0:1, length:1};
var fakeArrayLike = {length:1, height:2};
var window = window;
var fn = function() {};
var fake1 = {foo: NaN, length: 1};
var fake2 = {'12.24': 1, length: 1};
var fake3 = '';
var fake4 = '1';

console.log(isArrayLike(document.getElementsByTagName('body')) === true, 1);
console.log(isArrayLike(document.querySelectorAll('body')) === true, 2);
console.log(isArrayLike(array) === true, 3);
console.log(isArrayLike(arrayLike) === true, 4);
console.log(isArrayLike(fakeArrayLike) === false, 5);
console.log(isArrayLike(window) === false, 6);
console.log(isArrayLike(fn) === false, 7);
console.log(isArrayLike(fake1) === false, 8);
console.log(isArrayLike(fake2) === false, 9);
console.log(isArrayLike(fake3) === false, 10);
console.log(isArrayLike(fake4) === false, 11);


function isArrayLike(item) {
  if( typeof item === 'string' ) return false;
  if( item == null ) return false;
  if( item === window ) return false;
  if( !('length' in item) ) return false;
  if( typeof item === 'function' ) return false;
  if( item.length === 0 ) return true;
  return ( item.length - 1 ) in item
}


---

Erolast, не всегда есть возможность патчить)
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #1052 (permalink)  
Старый 31.03.2015, 20:02
Аватар для МаксимкаНевозбанный
Новичок на форуме
Отправить личное сообщение для МаксимкаНевозбанный Посмотреть профиль Найти все сообщения от МаксимкаНевозбанный
 
Регистрация: 31.03.2015
Сообщений: 9

nerv_, а я вот думал на счет стринга но почему то оставил его, посмотрев на ангуляр, хотя нет в нем смысла

nerv_, ух ты, даже likeArray(document.createTextNode('выыв')) выдает false

поставлю себе в юишку эту функцию ка я)
Ответить с цитированием
  #1053 (permalink)  
Старый 31.03.2015, 20:31
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от МаксимкаНевозбанный
а я вот думал на счет стринга но почему то оставил его, посмотрев на ангуляр, хотя нет в нем смысла
я пока 50/50 расцениваю. Не определился еще. Хотя, если мы проверяем на "массиво-подобные объекты", строка не объект, т.ч false.

Немного сократил. На последнем тесте врет.
С этими не знаю как правильно.
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #1054 (permalink)  
Старый 31.03.2015, 20:46
Аватар для МаксимкаНевозбанный
Новичок на форуме
Отправить личное сообщение для МаксимкаНевозбанный Посмотреть профиль Найти все сообщения от МаксимкаНевозбанный
 
Регистрация: 31.03.2015
Сообщений: 9

вообще likeArray предполагается что должна использоваться внутри toArray который по сути строку должен оборачивать в ['строка']

function toArray(item){
  if( likeArray(item) ) return [].slice.call(item);
  return [item]
}


так что строка не должна быть liteArray по уму чтобы можно было делать так


eventNames = toArray(eventsNames)

и если был массив строк то он и останется а если была строка то обернется в массив в котором будет в первой ячейке

Последний раз редактировалось МаксимкаНевозбанный, 31.03.2015 в 20:49.
Ответить с цитированием
  #1055 (permalink)  
Старый 31.03.2015, 21:36
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от Zend Посмотреть сообщение
Safort,
Это называется - пилить сук на котором сидишь. Ни разу не видел где бы такой приём понадобился.
Ты просто не сталкивался, но это очень частый кейз.

***

По поводу likeArray, то у меня юзается так:
https://github.com/kobezzza/Collecti.../types.js#L134

Надо пожалуй добавить проверку для window.
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 31.03.2015 в 21:47.
Ответить с цитированием
  #1056 (permalink)  
Старый 31.03.2015, 22:31
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от kobezzza
По поводу likeArray, то у меня юзается так:
https://github.com/kobezzza/Collecti.../types.js#L134
спасибо

Ты в курсе, что все подобные проверки идут лесом ибо
Цитата:
Не друзья: instanceof и фреймы
Оператор instanceof не срабатывает, когда значение приходит из другого окна или фрейма.

Например, массив, который создан в ифрейме и передан родительскому окну — будет массивом в том ифрейме, но не в родительском окне. Проверка instanceof Array в родительском окне вернёт false.

Вообще, у каждого окна и фрейма — своя иерархия объектов и свой window .

Как правило, эта проблема возникает со встроенными объектами, в этом случае используется проверка внутреннего свойства [[Class]]. Более подробно это описано в главе Оператор typeof, [[Class]] и утиная типизация.
http://learn.javascript.ru/instanceof

А еще зачем это, если есть старая добрая утиная типизация?) Т.е. эту функцию можно сократить.

Впрочем, это поверхностное суждение, я не знаю как у тебя там все устроено)
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #1057 (permalink)  
Старый 31.03.2015, 22:43
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Цитата:
Ты в курсе, что все подобные проверки идут лесом ибо
Конечно, но видимо просто забыл Спасибо, я напишу тесты.

Цитата:
А еще зачем это, если есть старая добрая утиная типизация?) Т.е. эту функцию можно сократить.

Впрочем, это поверхностное суждение, я не знаю как у тебя там все устроено)
Если честно, то я уже не помню, т.к. писал давно, но помню, что так зачем то надо было. Просто со временем всплывают баги - ты их прибиваешь и спокойно забываешь, а потом смотришь и думаешь - нах я это писал ?

Я планировал вернуться к разработке новой версии Collection вскорем, проведу ревью кода, но думаю, что здесь так надо было.
__________________
kobezzza
code monkey
Ответить с цитированием
  #1058 (permalink)  
Старый 31.03.2015, 23:22
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

Сообщение от kobezzza
Просто со временем всплывают баги - ты их прибиваешь и спокойно забываешь
Хороший код сам себя комментирует
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #1059 (permalink)  
Старый 31.03.2015, 23:25
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от trikadin Посмотреть сообщение
Хороший код сам себя комментирует
__________________
kobezzza
code monkey
Ответить с цитированием
  #1060 (permalink)  
Старый 01.04.2015, 00:12
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

Сообщение от trikadin
Хороший код
Хороший код, это код с комментариями в узких местах.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.

Последний раз редактировалось Gozar, 01.04.2015 в 00:14.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Смишных картинок тред megaupload Оффтопик 3447 03.07.2023 09:47
React'а тред melky Оффтопик 246 13.11.2016 08:07
Webpack'а тред nerv_ Сборка проекта, утилиты 58 07.05.2016 13:46
Смешных историй тред monolithed Оффтопик 11 04.03.2015 04:20
Смишных видео с намеком тред godofjavascript Оффтопик 4 30.12.2012 23:50