Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Элементарный вопрос (https://javascript.ru/forum/misc/49357-ehlementarnyjj-vopros.html)

new_developer 09.08.2014 16:52

Элементарный вопрос
 
if (!handler.guid) {


когда знак возклицания в условие ставится это имеется ввиду что не равно = 0, undefined , null ? правильно понимаю

и ещё логику этого условие разшифруйте))

if (elem.setInterval && ( elem != window && !elem.frameElement ) ) {

как я его вижу : елементу задается setInterval и этот элемент не равен window , а чему он может быть равен?)) и элемент не фрайм.

Aetae 09.08.2014 17:01

1.
! - отрицание.
if(!a) -> if(a == false)

2. скорее всего elem должен быть window, но раз не текущим и не фрейма, то результатом window.open()

new_developer 09.08.2014 17:05

Aetae,
а что значит результатом window.open()?

new_developer 09.08.2014 17:21

Rise,

кароче просто не понимаю этого выражения != window где потрогать можно этот чисто window ? :)

new_developer 09.08.2014 17:59

Rise,
я как-раз этим и занимаюсь )

MallSerg 09.08.2014 18:43

if в JavaScript - это языковая конструкция которая выполняет определенные действия если соблюдаются условия
Условия задаются с помощью «()» круглых скобок
Любые операции заданные в этих круглых скобках приводятся к логическому значению истина (true) или лож (false)
Если условие заданное в скобках истинное (true) то выполняется блок кода заключенный в «{}» фигурные скобки

В условии используются логические операторы &&, !, !=, ....
логические операторы возвращают логическое значение т.е. возвращают true или false в зависимости от условий
условия задаются слева от оператора и справа
т.е. (elem.setInterval && ( elem != window && !elem.frameElement ) ) это выражение с несколькими логическими операторами

по шагам
1. (elem.setInterval && ( elem != window && !elem.frameElement ) )
2. ( true && ( elem != window && !elem.frameElement ) )
3. ( true && ( elem != window && !elem.frameElement ) )
4. ( true && ( true && !elem.frameElement ) )
5. (true && ( true && !false) )
6. (true && ( true && true )
7. ( true && true )
8. ( true )

elem.setInterval - приводится к истине если у переменной "elem" есть свойство или метод "setInterval"
elem != window - приводится к истине если переменная "elem" не равна переменной window
!elem.frameElement - приводится к истине если у переменной "elem" нет свойства или метода "frameElement"

Aetae 09.08.2014 19:01

Цитата:

Сообщение от MallSerg (Сообщение 325084)
!elem.frameElement - приводится к истине если у переменной "elem" нет свойства или метода "frameElement"

Не совсем.
!elem.frameElement - приводится к истине если у переменной "elem" нет свойства или метода "frameElement", или оно == false.
elem = {frameElement:0};
alert(!elem.frameElement)
alert('frameElement' in elem)

Aetae 09.08.2014 19:05

Пояснение к тому что я имел ввиду изначально:
<script>
  var elem = window;
  alert([ ' Normal window:',
    'elem.setInterval:\t\t' + !!elem.setInterval,
    'elem != window:\t\t' + (elem != window),
    '!elem.frameElement:\t' + !elem.frameElement,
    (elem.setInterval && ( elem != window && !elem.frameElement ) ) 
  ].join('\n'))
</script>
<input type="button" onclick="
  var elem = window.open('about:blank');
  alert([ ' New window:',
    'elem.setInterval:\t\t' + !!elem.setInterval,
    'elem != window:\t\t' + (elem != window),
    '!elem.frameElement:\t' + !elem.frameElement,
    (elem.setInterval && ( elem != window && !elem.frameElement ) ) 
  ].join('\n'))
" value="click me">
<iframe src="about:blank" onload="
  var elem = this.contentWindow;
  alert([ ' Frame window:',
    'elem.setInterval:\t\t' + !!elem.setInterval,
    'elem != window:\t\t' + (elem != window),
    '!elem.frameElement:\t' + !elem.frameElement,
    (elem.setInterval && ( elem != window && !elem.frameElement ) ) 
  ].join('\n'))
" style="position:absolute;top:-800px;">


Часовой пояс GMT +3, время: 15:09.