Объясните пожалуйста конструкцию
Что вернет функция, если она имеет такую конструкцию:
function a(e){
........
return b,
c,
d
}
То есть, если возвращаемые значения указаны через запятую, что она вернет? Столкнулся с такой конструкцией первый раз. Вот полный пример такой функции:
function getHref(e) {
if (!e) return !1;
var t = !1;
return e.getAttribute && (t = e.getAttribute("data-href") || e.getAttribute("href")),
t || (e.pathname ? t = e.pathname + e.search + e.hash : tag(e) || (t = e)),
t || !1
}
|
Цитата:
Т.к. запятая выполняет оба операнда (слева направо) и возвращает значение второго оператора. Т.е. сначала запятая отбросит b и вернет c, затем отбросит с и вернет d; |
Цитата:
А какой смысл в такой конструкции? Тогда логичнее наверно писать:
function(){
...
b,
c;
return d
}
Цитата:
|
Urfin, может имеет смысл учебник прочитать? Про запятую вот хорошая статья — http://habrahabr.ru/post/116827/
|
Decode, ок, спасибо. Искал здесь в справочнике, ответа не нашел, буду читать учебник.
Но суть я пока не понял что делает эта функция. |
Decode спасибо за ссылку.
Все понял, разобрался. |
Urfin, вам еще таблица приоритетов операторов понадобиться.
|
Цитата:
Короче слышали фразу "свистелки и перделки" - оно самое. |
Цитата:
Но сайт на этом коде работает очень не плохо. Это с мобильного Вконтаке функция. |
Во-во, не удивлюсь что программистами там пашуть волонтеры с того же самого вконтакта, то есть сами на тех же веществах, откуда и стиль.
Цитата:
Потому что грядет байткод - покайтесь! |
Квази-рациональное объяснение что !1 занимает ажно в два раза меньше места чем false рушится об null по умолчанию.
|
Цитата:
Функция в заглав посте после деобфускатора так выглядит. Тот же jquery.min точно такие же конструкции содержит. Так что в реале код наверно более читабелен и содержит true и false как и полагается. |
Это не обфускатор, а минимайзер. У меня такой есть, ничего он там не трогает. Обфускатор был бы заметен вообще тотально и фундаментально. Не надо выгораживать хуйдожников - их обидеть может каждый и я не погнушаюсь :)
|
Цитата:
Вот как выглядят функции в jquery.min.js и в jquery.js для сравнения.
isPlainObject: function (a) {
return "object" !== n.type(a) || a.nodeType || n.isWindow(a) ? !1 : a.constructor && !j.call(a.constructor.prototype, "isPrototypeOf") ? !1 : !0
},
isEmptyObject: function (a) {
var b;
for (b in a) return !1;
return !0
},
type: function (a) {
return null == a ? a + "" : "object" == typeof a || "function" == typeof a ? h[i.call(a)] || "object" : typeof a
},
isPlainObject: function( obj ) {
// Not plain objects:
// - Any object or value whose internal [[Class]] property is not "[object Object]"
// - DOM nodes
// - window
if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
return false;
}
if ( obj.constructor &&
!hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) {
return false;
}
// If the function hasn't returned already, we're confident that
// |obj| is a plain object, created by {} or constructed with new Object
return true;
},
isEmptyObject: function( obj ) {
var name;
for ( name in obj ) {
return false;
}
return true;
},
type: function( obj ) {
if ( obj == null ) {
return obj + "";
}
// Support: Android<4.0, iOS<6 (functionish RegExp)
return typeof obj === "object" || typeof obj === "function" ?
class2type[ toString.call(obj) ] || "object" :
typeof obj;
},
Так что в реальном виде скрипт точно хорошо читаем и у контакта тоже. Художеств в код добавляет минимайзер, который оптимизирует как условные выражения, так и переменные и true, false. |
Цитата:
Забираю свой наезд. Не знал. Ну то есть я знал про обфускаторы, но было такое мнение подтвержденное некоторыми примерами, что они городят бред несусветный. А тут все даже по-человечески остается, и более художественно. Значит хуйдожники - авторы обфускатора. :) Кстати, а где можно скачать такой? Или он как та гуглевая платформа для дизайн-тайм интегрирован с жикверей? |
Цитата:
Суровые там правила: Цитата:
=== Нет, я имел ввиду скачать, то есть на комп, на php лучше, чтоб сразу все обновлялось. |
| Часовой пояс GMT +3, время: 01:57. |