LINUX.ORG.RU

Странное поведение переменной в куске Javascript кода

 ,


0

1

code

    _debug(graphicsViewIndex, 'graphicsViewIndex');
    _debug(this.graphicsViews.length, 'graphicsViews.length');
    _debug(typeof this.graphicsViews, 'graphicsViews.typeof');
    _debug(this.graphicsViews, 'graphicsViews');
    _debug(this.graphicsViews instanceof Array, 'graphicsViews.instanceof Array');
    _debug(undefined, 'value of undefined');
    _debug('', '---');

output

graphicsViewIndex: 0
graphicsViews.length: 2
graphicsViews.typeof: object
graphicsViews: undefinedgraphicsViews.instanceof Array: true
value of undefined: undefined
---: 

код функции _debug

function _debug(value, descr) {
    output_string = value + '\n';

    if (descr != null) {
        output_string = descr + ": " + output_string
    }

    ReportOut(output_string);
}

environment: standalone windows app, которое использует javascript используется как встроенное решение для написания плагинов(расширений)



update Внимание вопрос: как переменная со значением null/undefined может в тоже время иметь свойсто length (которое равно 2), и быть инстансом класса Array?
<<<<<

Буду признателен за любой совет

note: этот environment у меня «на работе», с которой я сейчас ухожу. все вашы советы смогу проверить только завтра

★★★★★

Последнее исправление: ZuBB (всего исправлений: 1)

Ну и что не так?
_debug(this.graphicsViews, 'graphicsViews'); по всей видимости тут this.graphicsViews == undefined. В функции дебаг делается undefined + «\n» — следовательно это не работает.

Bad_ptr ★★★★★
()
Последнее исправление: Bad_ptr (всего исправлений: 1)

И емнип ивенты и таймеры могут ломать выполнение, так что логирование в местах где ты пишешь в эту переменную тоже не помешало бы.

zz ★★★★
()
Ответ на: комментарий от zz

неплохо, но вряд ли. ибо там идет присвоение. но попробую

какие еще будут идеи?

ps: немного дополнил топик

ZuBB ★★★★★
() автор топика
Последнее исправление: ZuBB (всего исправлений: 1)
Ответ на: комментарий от Bad_ptr

Ну и что не так?

добавил вопрос о том что не так в топик

ZuBB ★★★★★
() автор топика
Ответ на: комментарий от zz

так что логирование в местах где ты пишешь в эту переменную тоже не помешало бы.

согласен

И емнип ивенты и таймеры могут ломать выполнение

это да, но у меня их нет

ZuBB ★★★★★
() автор топика
Последнее исправление: ZuBB (всего исправлений: 1)
Ответ на: комментарий от ZuBB

Треды? Проблема очевидно в том что либо кто то в него пишет, либо пишет во чтото другое у которого тоже проблема со скопингом.

zz ★★★★
()
_debug(this.graphicsViews.length, 'graphicsViews.length');
_debug(typeof this.graphicsViews, 'graphicsViews.typeof');
_debug(this.graphicsViews, 'graphicsViews');
_debug(this.graphicsViews instanceof Array, 'graphicsViews.instanceof Array');

Всё, кроме третьей строчки выводится правильно, при условии что this.graphicsViews - Array из 2х элементов.

Смущает то, что пытаясь сконкатенировать this.graphicsViews с символом ньюлайна ты получаешь undefined.

console.log не пробовал?

NOX
()
Ответ на: комментарий от NOX

console.log не пробовал?

environment: standalone windows app, которое использует javascript используется как встроенное решение для написания плагинов(расширений)

често, не пробовал. но я думаю что его там нет, ибо разрабы ничего не рекомедуют для данного случая. приходится пользовать возможностью писать в единственное текстовое окно посредством ReportOut

ZuBB ★★★★★
() автор топика
Последнее исправление: ZuBB (всего исправлений: 2)
Ответ на: комментарий от zz

проблема со скопингом

и еще одна идея

ZuBB ★★★★★
() автор топика
Ответ на: комментарий от zz

да, об этом я и подумал. вероятность небольшая, но все же нужно проверить

ZuBB ★★★★★
() автор топика
Ответ на: комментарий от zz

Phonegap

:) неа.

прога достаточно редкая. я даже не помню ни название, ни производителя, ни сайт

ZuBB ★★★★★
() автор топика
Ответ на: комментарий от NOX

Всё, кроме третьей строчки выводится правильно, при условии что this.graphicsViews - Array из 2х элементов.

да, но если this.graphicsViews равно null то

_debug(typeof this.graphicsViews, 'graphicsViews.typeof');

тоже выводится правильно

ZuBB ★★★★★
() автор топика
Ответ на: комментарий от anonymous

вся эта ситуация напоминает старый анекдот

Тук-тук!!
-Хто там?
-Партизани
-А скільки вас?
-Цванціг!

но в моей ситуации он будет немного видоизменен

2й прогер: что говорит console.log?
1й прогер: undefined
2й: это какаято х"№;@. /злорадствуя/ Может у него пропертя 'length' имеется?
1й (после короткой паузы). Прикинь, он говорит что есть
2й: ну и чему же она равна?
1й: Ты не поверишь: двум
(молчание)

вот что бы было, если бы мой «пример» отработал в консоли хрома

a = [1,2]
[1, 2]
console.log(a)
[1, 2]
undefined
function SO() {}
undefined
o1 = new SO();
SO
o2 = new SO();
SO
b = [o1, o2]
[SO, SO]
console.log(b)
[SO, SO]
undefined

в environment которым я вынужден пользоваться последняя комманда(ReportOut) выводит(именно выводит, а не возвращает) undefined. Хотя с самой переменной все ОК. Я подозреваю что для нее new SO() (здесь оно как пример) уже является «сложным типом», и оно не может его раскрыть (даже до Object). посему и выводит undefined

Хотя возможно что я ошибаюсь и сему есть другое обьяснение

ZuBB ★★★★★
() автор топика
Последнее исправление: ZuBB (всего исправлений: 1)
Ответ на: комментарий от anonymous

zz, anonymous

добавил обещанные подробности

ZuBB ★★★★★
() автор топика
Ответ на: комментарий от ZuBB

Я бы не сказал, что дело здесь в ReportOut, так как эта функция получает один параметр — строку для вывода — и, как минимум начало этой строки выводит правильно. Тут скорее всего странное поведение выражения value+'\n'. Т.е. есть какието проблемы с преобразованием value в строку. Интересно, что будет выводить _debug(this.graphicsViews.hasProperty(«toString»), 'graphicsViews.hasProperty(toString)'). А что такое graphcsViews (понятно, что в его цепочке протатипов есть Array, но Array ли это?), и что в нем храниться? Просто интерестно для чего в вашей среде операция + '\n' может вернуть undefined.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.