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, то при удачном результате вернулся бы он, или как? а что в этом случае будет? Спасибо. |
Ваш код аналогичен следующему:
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 использовать. |
Цитата:
|
Просто выражения через запятую выполняются
alert(1), alert(2), alert(3); |
А точка с запятой?
Сейчас я понимаю, что я и первую часть кода не понял. О "?" прочитал в учебнике, но там конструкция отличается. Видно кроме "," не понял еще и работу "&&". |
Точка с запятой — разделитель инструкция, запятая — оператор. Запятая может быть в выражении, точка с запятой — нет. Особенности оператора "запятая" таковы, что она возвращает свой второй операнд.
&&, как и ||, по аналогии со многими другими языками реализуют т.н. Short-circuit evaluation. Т.е. если значение первого операнда оператора && приводится к false, то вычислять (выполнять) второй уже не нужно, т.к. результат уже известен. |
Как будет работать
a&&a.call(this) так? if (a) a.call(this) |
А вот этот код
a && b.fn1() && b.fn2() && b.fn3() Вот так? if (a) { if (b.fn1()){ if (b.fn2()) {b.fn3()} } } |
Цитата:
Цитата:
|
Спасибо большое.
Разбираю сейчас код, максимально упакованный. Сам в этом деле новичёк, ПРИХОДИТСЯ дополнять (в большей степени менять) не существующий (не удовлетворяющий) функционал библиотеки. Есть еще вопросики. В связи с тотальной упаковкой кода все написано без переносов строк. Но во многих случаях там отстутствуют ";" . Какие правила существуют для обязательных разделителей между инструкциями? Например, после окончания блока "}" может сразу начинаться следующий блок без переноса на следующую строку? Вот например сейчас мне не понятна такая конструкция: 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 раза не повторять? Если так, то можно после них (запятых) перенос строки делать? |
Часовой пояс GMT +3, время: 02:09. |