 
			
				12.12.2011, 02:01
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 ⊞ Развернуть 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 11.01.2010 
					
					
					
						Сообщений: 1,810
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		melky, круто, только функция возвращает -1. 
alert(
(function pewpew(Infinity, length, __proto__) {
	return [,,~0.[0|0]][pewpew.__proto__.length && Infinity, -~String(this).length >> __proto__] << (0. === .0) + Infinity;
})
.apply(typeof pewpew, [,,2])
)
Ошибка в 151-ой строке. 
	
 
	| 
		
			Сообщение от melky
			
		
	 | 
 
	
		у меня __proto__ равен объекту CommandLineAPI 
 
это как понимать ? __proto__ занята , как class  и т.д ?
	 | 
 
	
 
 Который внутри функции? Быть не может. И у меня такого не происходит.  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось B@rmaley.e><e, 12.12.2011 в 02:28.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				12.12.2011, 10:14
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 sinistral 
				
				
				
				
	
 
 
			 | 
			  | 
			
				
				
					Регистрация: 28.03.2011 
					
					
					
						Сообщений: 5,418
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от B@rmaley.e><e
			 
		
	 | 
 
	| 
		Ошибка в 151-ой строке.Который внутри функции? Быть не может. И у меня такого не происходит.
	 | 
 
	
 
 сам удивлён. это произошло, когда я из консольного вызова этой функции (ну просто в консоль код подставил) и подписал в её начале debugger. наверное, тут собака зарыта   
PS там вроде 148 строк   
PSS ошибка была в том, что я написал в разделе ARR, что он будет таким :
 
[,,-1]
 
а потом в коде и в других местах писал , что он будет равен
 
[,,2]
 
в этом и была ошибка. лол    это от невнимательности. она меня везде преследует.
 
таки опубликую этот пост, с поправкой.  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось melky, 12.12.2011 в 10:28.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				12.12.2011, 10:26
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 sinistral 
				
				
				
				
	
 
 
			 | 
			  | 
			
				
				
					Регистрация: 28.03.2011 
					
					
					
						Сообщений: 5,418
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		написал всё в пунктиках : 
рассмотрим return поподробней, в нескольких частях - ARR
 
return *!*[,,~0.[0|0] ]*/!* [ ... ] << ...;
  
создаст массив с длиной 3, где первый (key==0) и второй (key==1) равны undefined,  а последний равен -1. почему ? краткая схема должна показать ход тождественных преобразований 
~0.[0|0] =>  ~0.[0] => ~undefined => -1
  
убедитесь сами. причём разложение побитового "НЕ" (~) на тождественную ему математическую операцию ( ~a == -1*(a+1) ) не даст такого же результата, потому что любые арифметические операции (сложение, деление...) с undefined дают NaN : 
alert( ~undefined == -1*(undefined+1) ); // false
  
итак. наш массив таков : 
[  undefined, undefined, -1 ]
  
идём дальше. 
- key
 
pewpew.__proto__.length && Infinity, -~String(*!*undefined||??*/!*).length >> __proto__
  
(подчёркнуто то, что неоднозначно : если в текущей области видимости есть переменная pewpew, то будет что-то отличное от undefined) 
... ну да ладно. посчитаем, что ничего не определялось до запуска функции. 
его формат : 
	
 
	| 
		 Код: 
	 | 
 
	NUM && undefined, NUM >> 2  | 
 
	
 
 
значения аргументов подставлены из apply. там ещё length равен undefined - по аналогии с верхним пунктом. 
 
... преобразовывается формат в такой (следуем по запятой - она просто возвратит значение справа)  
т.е. в виде кода это : 
pewpew.__proto__.length && undefined, -~String(undefined).length >> 2
  
обернём в скобки, чтобы пояснить, что операторы в JS работают слева направо : 
( (NUM&&undefined), NUM) >> NUM
  
а теперь разбираем: 
pewpew будет указывать на текущую функцию (arguments.callee). её свойство __proto__ равно пустой функции Empty.  
вот тут я почесал репу. я знаю, почему, но не могу объяснить. это вторая стадия понимания (первая - "не понял").. плохо. буду читать   
ну да ладно. 
т.е. 
pewpew.__proto__.toString() == "function Empty(){}"
 
у этой функции мы получаем количество аргументов length. само собой, оно равно нулю - 0 
 
т.е. конструкция превращается в такую 
(pewpew.__proto__.length, -~String(undefined).length) >> 2
  
>> будет работать с результатом запятой. 
 
результат запятой- то, что находится с правой её стороны. 
 
код превращается в такой : 
-~String(undefined).length >> 2
  
этот код приведёт undefined к строке ("undefined", само собой) 
далее он получит её длину (9), далее (от ~) прибавит к ней 1, умножит на -1 и (от -) поставит противоположный знак. 
получаем 
10 >> 2
  
это равно 
alert( 10 >> 2 ); // 2
  
идём дальше. 
- <<NUM
 
(0. === .0) + Infinity
  
то, что в скобках - разная форма записи одного и того же числа. разумеется, результат выполнения равен true : 
	
 
	| 
		 Код: 
	 | 
 
	0. => 0   }
              |  =>   0 === 0    =>    true
.0 => 0   } | 
 
	
 
 
далее идёт суммирования булевого true, который при приведении к числу становится 1 с undefined (аргумент) 
это равно NaN :  
	
 
	| 
		 Код: 
	 | 
 
	(true + undefined) === NaN  | 
 
	
 
 
 
 всё.
 
таким образом, форма записи этой функции расширяется до : 
(убрал запятую и &&.)
 
(function pewpew(Infinity, length, __proto__){
    return [undefined, undefined, -1][ -~String(undefined).length >> 2  ] << NaN;
}).call(typeof pewpew, undefined, undefined, 2);
...проверим, равны ли возвращаемые значения этого кода и оригинального ?
 
var original = (function pewpew(Infinity, length, __proto__) {
  return [,,~0.[0|0]][pewpew.__proto__.length && Infinity, -~String(this).length >> __proto__] << (0. === .0) + Infinity;
}).apply(typeof pewpew, [,,2]);
var remixed = (function pewpew(Infinity, length, __proto__){
    return [undefined, undefined, -1][ -~String(undefined).length >> 2  ] << NaN;
}).call(typeof pewpew, undefined, undefined, 2);
alert( original === remixed );
да. всё хорошо   
если подставить переменные, то получается (без return. это уже не функция. просто код) :
 
[undefined, undefined, -1][2] << NaN
 
это эквивалентно :
 
-1 << NaN
 
и равно это
 
alert( -1 << NaN ); //  -1
 
THE END  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось melky, 12.12.2011 в 20:51.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				12.12.2011, 10:55
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 junior 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 29.11.2011 
					
					
					
						Сообщений: 3,924
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		melky, Приветствую! Тут, наверное, опечатка
 
	
 
	| 
		
			Сообщение от melky
			
		
	 | 
 
	| 
		создаст массив с длиной 3, где первый (key==0) и второй (key==2) равны undefined
	 | 
 
	
 
 и тут тоже
 
	
 
	| 
		
			Сообщение от melky
			
		
	 | 
 
	| 
		~0.[0|0] =>  ~0..0 => ~undefined => -1
	 | 
 
	
 
  
		
	
		
		
		
		
		
			
				__________________ 
				Чебурашка стал символом олимпийских игр. А чего достиг ты? 
Тишина - самый громкий звук
			 
		
		
		
		
		
						  
				
				Последний раз редактировалось nerv_, 12.12.2011 в 12:50.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				12.12.2011, 20:51
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 sinistral 
				
				
				
				
	
 
 
			 | 
			  | 
			
				
				
					Регистрация: 28.03.2011 
					
					
					
						Сообщений: 5,418
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			 Цитата: 
		
	 | 
 
	| 
		~0.[0|0] => ~0..0 => ~undefined => -1
	 | 
 
	
 
 и нет, и да.
 
две точки поставлены для обращения к свойству  0 числа  0.
 
аналог :
 
Number.prototype.test = "okay";
alert( 0..test ); // okay
 
вообще, я с сонным мозгом забыл про квадратные скобки. спасибо за находки   
поправил.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				12.12.2011, 21:46
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 junior 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 29.11.2011 
					
					
					
						Сообщений: 3,924
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 melky, эт Вам спасибо, что на нас, неучей, время тратите ^_^ 
Я так понимаю, две точки - обращение к прототипу. А как к нему еще можно обратиться? 
		
	
		
		
		
		
		
			
				__________________ 
				Чебурашка стал символом олимпийских игр. А чего достиг ты? 
Тишина - самый громкий звук
			 
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				12.12.2011, 21:48
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 ⊞ Развернуть 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 11.01.2010 
					
					
					
						Сообщений: 1,810
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от nerv_
			
		
	 | 
 
	| 
		Я так понимаю, две точки - обращение к прототипу. А как к нему еще можно обратиться?
	 | 
 
	
 
 Это обычное обращение к свойству, но с поправкой на то, что в числах точка используется ещё и для отделения целой части от дробной. Поэтому приходится писать 1..property, что эквивалентно (1).property.
 
Ну и это всё же не обращение к прототипу, а обращение к свойству. Но т.к. у примитивов своих свойств не бывает, значение может быть взято только из прототипа.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				12.12.2011, 21:55
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 х.з 
				
				
				
				
	
 
 
			 | 
			  | 
			
				
				
					Регистрация: 21.11.2010 
					
					
					
						Сообщений: 4,588
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Блин,народ тело пишет всякую ерунду в своём извращенном сознании ,а вы в этом бреде ещё пытаетесь разобраться.  
Не Гоните!!! помните?- с кем поведёщься от того и наберёшься??!!! 
блин ща минусовать начну,зная что вы заминусете возможможно больше в ответ,но это возможно вернёт вас к реальности-поймёте что ведётесь на бред  шизофреника!!  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось dmitriymar, 12.12.2011 в 22:01.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				12.12.2011, 22:22
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 junior 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 29.11.2011 
					
					
					
						Сообщений: 3,924
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от dmitriymar
			
		
	 | 
 
	| 
		Не Гоните!!! помните?- с кем поведёщься от того и наберёшься??!!!
	 | 
 
	
 
 "С кем поведешься, так тебе и надо"    
	
 
	| 
		
			Сообщение от dmitriymar
			
		
	 | 
 
	| 
		Блин,народ тело пишет всякую ерунду в своём извращенном сознании ,а вы в этом бреде ещё пытаетесь разобраться.
	 | 
 
	
 
 Иной раз приходится разобираться в чужом бреде и от этого ни куда не денешься. А код (по возможности) надо уметь читать любой(обфускация, компрессия и т.п. извращения не в счет)
 B@rmaley.e><e, благодарю. Как хорошо, что Вы не позволили мне придти к ложным выводам/умозаключениям   
(пытаюсь плюсовать Вам карму, но чем форум ругается...)  
		
	
		
		
		
		
		
			
				__________________ 
				Чебурашка стал символом олимпийских игр. А чего достиг ты? 
Тишина - самый громкий звук
			 
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				12.12.2011, 22:28
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 sinistral 
				
				
				
				
	
 
 
			 | 
			  | 
			
				
				
					Регистрация: 28.03.2011 
					
					
					
						Сообщений: 5,418
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от dmitriymar
			 
		
	 | 
 
	
		Блин,народ тело пишет всякую ерунду в своём извращенном сознании ,а вы в этом бреде ещё пытаетесь разобраться.  
Не Гоните!!! помните?- с кем поведёщься от того и наберёшься??!!!  
блин ща минусовать начну,зная что вы заминусете возможможно больше в ответ,но это возможно вернёт вас к реальности-поймёте что ведётесь на бред шизофреника!!
	 | 
 
	
 
 да, так оно и есть. Только одно "НО" : я то от этого уже ушёл. да , у меня была эта отвратительная привычка - до жопы сокращать код, просто потому, что так "меньше букв". и комментариев не писать, потому что это "лишние буквы".
 
мне тогда было невдомёк про чистый и понятный код    
я глупо превращал свой стиль в стиль компилятора от гугла.
 
сейчас же я так (обфусцированно) не пишу и стараюсь от этого уберегать других  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |