Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.01.2012, 21:15
Интересующийся
Отправить личное сообщение для pupena_san Посмотреть профиль Найти все сообщения от pupena_san
 
Регистрация: 06.10.2011
Сообщений: 20

b && (<инстр>,<инстр>)
Извините за ламерский вопрос.
Есть такой кусок кода:

window.XMLHttpRequest ? b=new XMLHttpRequest:window.rb && (b=new ActiveXObject("MSXML2.XMLHTTP"));
b && (b.open("GET",a,!1),b.send(""));

1) в первой строчке я так понимаю возвращается объект XMLHttpRequest с типом в зависимости от браузера
2) b.open("GET",a,!1) и b.send("") мне тоже понятен
Я мало переспал ночей с JavaScript и как то в голове не укладывается что значит запятые в скобках (что в конце концов в скобках мы получим) и как с эти результатом слаживают XMLHttpRequest по И, и куда это все пишется?
В теории оператор &&
"Возвращает последний операнд, если все операнды верны. Если хоть один из операндов неверен, то возвратит первый неверный операнд."
Я так понимаю что если бы был только один из методов GET или send, то при удачном результате вернулся бы он, или как? а что в этом случае будет?
Спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 18.01.2012, 21:22
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Ваш код аналогичен следующему:
if (window.XMLHttpRequest) {
	b = new XMLHttpRequest;
} else if (window.rb) {
	b = new ActiveXObject("MSXML2.XMLHTTP");
} else {
	b = window.rb;
}
if (b) {
	b.open("GET", a, !1);
	b.send("");
}


Кстати, если IE6 не нужен, можно сразу XMLHttpRequest использовать.

Последний раз редактировалось Octane, 18.01.2012 в 21:53.
Ответить с цитированием
  #3 (permalink)  
Старый 18.01.2012, 21:33
Интересующийся
Отправить личное сообщение для pupena_san Посмотреть профиль Найти все сообщения от pupena_san
 
Регистрация: 06.10.2011
Сообщений: 20

Сообщение от Octane Посмотреть сообщение
Ваш код аналогичен следующему:
if (b) {
	b.open("GET", a, !1);
	b.send("");
}

Этот код мне понятен. Но почему так получается?
Ответить с цитированием
  #4 (permalink)  
Старый 18.01.2012, 21:40
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Просто выражения через запятую выполняются
alert(1), alert(2), alert(3);
Ответить с цитированием
  #5 (permalink)  
Старый 18.01.2012, 21:45
Интересующийся
Отправить личное сообщение для pupena_san Посмотреть профиль Найти все сообщения от pupena_san
 
Регистрация: 06.10.2011
Сообщений: 20

А точка с запятой?
Сейчас я понимаю, что я и первую часть кода не понял. О "?" прочитал в учебнике, но там конструкция отличается. Видно кроме "," не понял еще и работу "&&".
Ответить с цитированием
  #6 (permalink)  
Старый 18.01.2012, 21:52
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Точка с запятой — разделитель инструкция, запятая — оператор. Запятая может быть в выражении, точка с запятой — нет. Особенности оператора "запятая" таковы, что она возвращает свой второй операнд.
&&, как и ||, по аналогии со многими другими языками реализуют т.н. Short-circuit evaluation. Т.е. если значение первого операнда оператора && приводится к false, то вычислять (выполнять) второй уже не нужно, т.к. результат уже известен.
Ответить с цитированием
  #7 (permalink)  
Старый 18.01.2012, 22:33
Интересующийся
Отправить личное сообщение для pupena_san Посмотреть профиль Найти все сообщения от pupena_san
 
Регистрация: 06.10.2011
Сообщений: 20

Как будет работать
a&&a.call(this)

так?
if (a) a.call(this)
Ответить с цитированием
  #8 (permalink)  
Старый 18.01.2012, 22:53
Интересующийся
Отправить личное сообщение для pupena_san Посмотреть профиль Найти все сообщения от pupena_san
 
Регистрация: 06.10.2011
Сообщений: 20

А вот этот код
a && b.fn1() && b.fn2() && b.fn3()

Вот так?
if (a) {
    if (b.fn1()){
       if (b.fn2()) {b.fn3()}
    }
}
Ответить с цитированием
  #9 (permalink)  
Старый 18.01.2012, 23:10
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Сообщение от pupena_san
так?
Да.
Сообщение от pupena_san
Вот так?
Да.
Ответить с цитированием
  #10 (permalink)  
Старый 18.01.2012, 23:31
Интересующийся
Отправить личное сообщение для pupena_san Посмотреть профиль Найти все сообщения от pupena_san
 
Регистрация: 06.10.2011
Сообщений: 20

Спасибо большое.
Разбираю сейчас код, максимально упакованный. Сам в этом деле новичёк, ПРИХОДИТСЯ дополнять (в большей степени менять) не существующий (не удовлетворяющий) функционал библиотеки.
Есть еще вопросики. В связи с тотальной упаковкой кода все написано без переносов строк. Но во многих случаях там отстутствуют ";" . Какие правила существуют для обязательных разделителей между инструкциями?
Например, после окончания блока "}" может сразу начинаться следующий блок без переноса на следующую строку?
Вот например сейчас мне не понятна такая конструкция:
window.fn=new function(b){<code>}(document.getElementById("a"))

Последние скобки относятся к функции, или это просто такое разделение кода?
часто пишут аля такое:
var w=/.*\//.exec(window.location+""),j,v=$("<input>").attr({type:"button",id:"sb",value:"L"}).click(function(){j?a():c()});

тут запятые стоят, чтоб var 3 раза не повторять? Если так, то можно после них (запятых) перенос строки делать?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Chromium && Chrome developer bar trick. melky Javascript под браузер 5 16.01.2012 15:56
Ext.ux.grid.RowEditor && font-size нередактируемых элементов редактируемой row Ex_Soft ExtJS 1 15.02.2011 16:50
XHR && HTTP 403 status code && Opera Ex_Soft Opera, Safari и др. 9 05.01.2011 16:44
Keyboard navigation keys && Ext.form.NumberField && Opera Ex_Soft ExtJS 2 21.12.2010 13:27
Ext.FormPanel.load() && ComboBox Ex_Soft ExtJS 14 07.12.2010 10:23