Практически получился мануал по тонкостям JS - супер! Спасибо!!!
Пожалуйста
Как мне однажды ответили, «By helping, I learn».
Только не все это тонкости, ой, не все...
Кстати очень желательно вкл/откл REDRAW, чтобы текст не дёргался.
Угу, но позже... А сейчас особо времени нет =(
Т.е. эта контрукция вычисляестя до 1-го true, но возвращает результат, который = false, находящийся перед первым найденным true?
Я думаю, лучше на примерах
Проверять можно в браузере в виде
javascript: код
– скопировать в адресную строку и нажать <Enter>.
В глупом IE не работает из about:blank (может, и еще где-то) – только с «нормальных страниц».
В Firefox: Инструменты – Консоль ошибок – Проанализировать (и можно без добавления «javascript:»).
Еще можно в виде
javascript: alert( код );
Code: Select all
1 || 2*3 || 4*5 // 1
0 || 2*3 || 4*5 // 6
0 || 2*0 || 4*5 // 20
"" || false || 4*0 // 0
"Превед!" || alert(0) // "Превед!" (alert не сработает)
alert(0) || "Превед!" // alert(0) и возвращяет "Превед!"
1 && 2*3 && 4*5 // 20
1 && 2*3 && 4*0 // 0
1 && 2*0 && 4*5 // 0
0 && 2*3 && 4*5 // 0
0 && alert(0) // 0 (alert не сработает)
1 && alert(0) // alert(0) и возвращяет undefined от alert'а
(1 && !alert(0)) || (1 && alert(1)) // только alert(0) и возвращает !alert(0) - т.е. true
(0 && !alert(0)) || (1 && alert(1)) // только alert(1) и возвращает alert(1) - т.е. undefined
Пример от Google
(
translate_tools):
Code: Select all
var t = (
(window.getSelection && window.getSelection()) || // работает в Firefox и Opera
(document.getSelection && document.getSelection()) || // Konqueror (возможно, еще где-нибудь)
(document.selection && document.selection.createRange && document.selection.createRange().text) // IE
);
В принципе, внешние скобки ( var t =
( ...
); ) не особо нужны (разве что для старых браузеров).
Т.е. мы вызываем функцию (func
()) только если она вычисляется в true.
В случае IE получим:
Code: Select all
var t = (
(undefined && [i]не_вычисляется[/i]) || // вычисляется в false
(undefined && [i]не_вычисляется[/i]) || // вычисляется в false
(document.selection && document.selection.createRange && document.selection.createRange().text)
);
Таким образом, вычисляются последние скобки:
вычисляется_в_true && вычисляется_в_true && document.selection.createRange().text // возвращает document.selection.createRange().text
Code: Select all
var text = AkelPad.GetSelText() || AkelPad.SetSel(0, -1) || AkelPad.GetSelText();
Текст выделен:
var text = "выделенный_текст" || что-то_там; // "выделенный_текст"
Текст не выделен:
var text = "" || undefined || AkelPad.GetSelText(); // AkelPad.GetSelText()
Пояснение: AkelPad.SetSel(0, -1) возвращает нечто, вычисляющееся в false (не проверял, что именно, но, видимо, undefined).
Собственно,
javascript: function test() { var c = 0; } alert(test());
и
javascript: function test() { var c = 0; return c; } alert(test());
P.S. В false вычисляется:
false, undefined, null, 0, "", NaN (Not a Number)
Если ничего не упустил, то все остальное вычисляется в true.
Самый простой способ проверки:
!! выражение // два раза «не»