Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Аномальное поведение массива в Firefox 
V
    Опции темы
Megas
Дата 20.9.2013, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 15.1.2006

Репутация: нет
Всего: нет



Пытаюсь отладить код, который почемуто не работает в Firefox, но отлично работает в Chrome.

Суть такова, в некую функцию передаются параметры, один из которых массив. Внутри функции есть проверка этого массива (Переменная C):
user posted image

Какимто образом данное условие не срабатывает, не смотря на то, что данная переменная 100% массив. Это видно все в том же Firebug'e.
user posted image

Как можно видеть C является массивом, но при этом C instance Array почемуто false.

В функцию данный массив передаётся примерно так: someFunction([1, 2, 3])
При этом как можно видеть выше [] instanceof Array = true

Что я уже перепробовал:

1.
Код

var data = [1, 2, 3];
console.log(data instance Array);
someFunction(data);

Перед вызовом функции data instance Array возвращает true, а вот в функции уже false

2.
Пробовал и так:
Код

someFunction(new Array(1, 2, 3));

Всеравно не работает.

Для заметки:
1. Данное условие находится в самом начале функции, никаких действий с переменной C до этого не производится.
2. Проверяю на Firefox 23
3. Дебажу все через Firebug

Я уже и не знаю что делать, как такое вообще возможно? Что я упустил? Как я уже сказал, в хроме все работает отлично.
PM WWW   Вверх
skyboy
Дата 21.9.2013, 00:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 10
Всего: 260



Цитата(Megas @  20.9.2013,  19:43 Найти цитируемый пост)
 someFunction([1, 2, 3])

нет уж. давай полностью сигнатуру метода и как он вызывается.
мало ль.
arguments тоже выглядит как массив. но это не массив.
на крайняк, проверяй, что объект. и что есть length.
PM MAIL   Вверх
Megas
Дата 21.9.2013, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 15.1.2006

Репутация: нет
Всего: нет



Ну если вдаваться в подробности, то я пишу юзерскрипт для игры ikariam.
У них джаваскрипт обфусцирован, поэтому и названия у переменных такие.
Функцию которую я вызываю отвечает за создание всплывающего окна с произвольной информацией.

Метод вызывается так:
Код

ikariam.getPopupController().createPopup(
    'popup_id', 
    'Popup title', 
    ['Content text', 0, 'Close button text'], 
    0
);


А вот и сам метод в сокращенном виде, все строчки до нужного условия сохранены, остальное вырезанно так как нет в нем нужды:
Код

ikariam.PopupController = {
    createPopup: function(E, B, C, L, D) {
        var I = ikariam.getPopupController();
        I.boxMainContent = createEl("div");
        if (C instanceof Array && C.length > 0) {
            // вырезанно 
        } else {
            // вырезанно 
        }
    }, 
    
    // вырезанно 
};

PM WWW   Вверх
akizelokro
Дата 21.9.2013, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: 2
Всего: 5



попробуй передать ['1', '2', '3']


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
Megas
Дата 22.9.2013, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 15.1.2006

Репутация: нет
Всего: нет



akizelokro, как не удивительно, это никак не помогло. Да и с чего бы чтото изменило.

Ещё большей загадкой является то, что:
Код

Object.prototype.toString.call(C); //возвращает "[object Array]"

// а вот

C instanceof Array; //Уже равно false

PM WWW   Вверх
Megas
Дата 23.9.2013, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 15.1.2006

Репутация: нет
Всего: нет



Все, разобрался. Оказывается Array был переопределен.
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1327 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.