 
			
				31.03.2015, 19:58
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 junior 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 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, не всегда есть возможность патчить)  
		
	
		
		
		
		
		
			
				__________________ 
				Чебурашка стал символом олимпийских игр. А чего достиг ты? 
Тишина - самый громкий звук
			 
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				31.03.2015, 20:02
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Новичок на форуме 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 31.03.2015 
					
					
					
						Сообщений: 9
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 nerv_, а я вот думал на счет стринга но почему то оставил его, посмотрев на ангуляр, хотя нет в нем смысла 
 
nerv_, ух ты, даже likeArray(document.createTextNode('выыв')) выдает false 
 
поставлю себе в юишку эту функцию ка я) 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				31.03.2015, 20:31
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 junior 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 29.11.2011 
					
					
					
						Сообщений: 3,924
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от МаксимкаНевозбанный
			
		
	 | 
 
	| 
		а я вот думал на счет стринга но почему то оставил его, посмотрев на ангуляр, хотя нет в нем смысла
	 | 
 
	
 
 я пока 50/50 расцениваю. Не определился еще. Хотя, если мы проверяем на "массиво-подобные объекты", строка не объект, т.ч false.
 
Немного  сократил. На последнем тесте врет. 
С  этими не знаю как правильно.  
		
	
		
		
		
		
		
			
				__________________ 
				Чебурашка стал символом олимпийских игр. А чего достиг ты? 
Тишина - самый громкий звук
			 
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				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.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				31.03.2015, 21:36
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Быдлокодер;) 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 19.11.2010 
					
					
					
						Сообщений: 4,338
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от Zend
			 
		
	 | 
 
	
		Safort, 
 Это называется - пилить сук на котором сидишь. Ни разу не видел где бы такой приём понадобился.
	 | 
 
	
 
 Ты просто не сталкивался, но это очень частый кейз.
 
***
 
По поводу likeArray, то у меня юзается так:
 https://github.com/kobezzza/Collecti.../types.js#L134
Надо пожалуй добавить проверку для window.  
		
	
		
		
		
		
		
			
		
		
		
		
		
						  
				
				Последний раз редактировалось kobezzza, 31.03.2015 в 21:47.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				31.03.2015, 22:31
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 junior 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 29.11.2011 
					
					
					
						Сообщений: 3,924
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		спасибо
 
Ты в курсе, что  все подобные проверки идут лесом ибо
	
 
	| 
		
			 Цитата: 
		
	 | 
 
	
		Не друзья: instanceof и фреймы 
Оператор instanceof не срабатывает, когда значение приходит из другого окна или фрейма. 
 
Например, массив, который создан в ифрейме и передан родительскому окну — будет массивом в том ифрейме, но не в родительском окне. Проверка instanceof Array в родительском окне вернёт false. 
 
Вообще, у каждого окна и фрейма — своя иерархия объектов и свой window . 
 
Как правило, эта проблема возникает со встроенными объектами, в этом случае используется проверка внутреннего свойства [[Class]]. Более подробно это описано в главе Оператор typeof, [[Class]] и утиная типизация.
	 | 
 
	
 
 http://learn.javascript.ru/instanceof
А еще зачем  это, если есть старая добрая  утиная типизация?) Т.е.  эту функцию можно сократить.
 
Впрочем, это поверхностное суждение, я не знаю как у тебя там все устроено)  
		
	
		
		
		
		
		
			
				__________________ 
				Чебурашка стал символом олимпийских игр. А чего достиг ты? 
Тишина - самый громкий звук
			 
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				31.03.2015, 22:43
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Быдлокодер;) 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 19.11.2010 
					
					
					
						Сообщений: 4,338
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			 Цитата: 
		
	 | 
 
	| 
		Ты в курсе, что все подобные проверки идут лесом ибо
	 | 
 
	
 
 Конечно, но видимо просто забыл    Спасибо, я напишу тесты.
 
	
 
	| 
		
			 Цитата: 
		
	 | 
 
	
		А еще зачем это, если есть старая добрая утиная типизация?) Т.е. эту функцию можно сократить. 
 
Впрочем, это поверхностное суждение, я не знаю как у тебя там все устроено)
	 | 
 
	
 
 Если честно, то я уже не помню, т.к. писал давно, но помню, что так зачем то надо было. Просто со временем всплывают баги - ты их прибиваешь и спокойно забываешь, а потом смотришь и думаешь - нах я это писал ?   
Я планировал вернуться к разработке новой версии Collection вскорем, проведу ревью кода, но думаю, что здесь так надо было.  
		
	
		
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				31.03.2015, 23:22
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Модератор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.04.2010 
					
					
					
						Сообщений: 3,417
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от kobezzza
			
		
	 | 
 
	| 
		Просто со временем всплывают баги - ты их прибиваешь и спокойно забываешь
	 | 
 
	
 
 Хороший код сам себя комментирует    
		
	
		
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
	
		
	
		
		
		
			
			 
			
				01.04.2015, 00:12
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 猫 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 07.06.2007 
					
					
					
						Сообщений: 7,504
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от trikadin
			
		
	 | 
 
	| 
		Хороший код
	 | 
 
	
 
 Хороший код, это код с комментариями в узких местах.    
		
	
		
		
		
		
		
			
				__________________ 
				Последний раз редактировалось Gozar, Сегодня в 24:14.
			 
		
		
		
		
		
						  
				
				Последний раз редактировалось Gozar, 01.04.2015 в 00:14.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |