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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверка на массив 
V
    Опции темы
animegirl
Дата 5.12.2012, 04:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Незнайка на Марсе
**


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

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



Какой самый верный способ проверки данных на принадлежность к массиву, в гугле много разных вариантов, но большинство из них мне либо не понятны, либо работают в разных браузерах по разному :(
Есть какой-нибудь универсальный метод?


--------------------
Скажи миру - НЯ!
PM   Вверх
ksnk
Дата 5.12.2012, 05:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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





--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
animegirl
Дата 5.12.2012, 06:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Незнайка на Марсе
**


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

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



ksnk, 
1. это скорее is_array() чем in_array()
2. Нельзя использовать посторонние библиотеки


--------------------
Скажи миру - НЯ!
PM   Вверх
ksnk
Дата 5.12.2012, 06:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



Код

function inArray(needle, haystack) {
    var length = haystack.length;
    for(var i = 0; i < length; i++) {
        if(haystack[i] == needle) return true;
    }
    return false;
}

Что в этом примере использует сторонние библиотеки? В каком месте этого примера это is_array, а не in_array?  smile 

Это сообщение отредактировал(а) ksnk - 5.12.2012, 06:58


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
animegirl
Дата 5.12.2012, 07:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Незнайка на Марсе
**


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

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



Вы не поняли, МНЕ нужен is_array()


--------------------
Скажи миру - НЯ!
PM   Вверх
ksnk
Дата 5.12.2012, 07:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



Код

var y = [];

if(y instanceof Array){
  alert("массив");
} else {
  alert("не массив");
}



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Aliance
Дата 5.12.2012, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

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



ksnk, не очень хорошее решение, как мне кажется (объяснение).

Соответственно я бы предложил следующий вариант:
Код

function isArray(obj) {
    var clas = Object.prototype.toString.call(obj).slice(8, -1);
    return obj !== undefined && obj !== null && clas === 'Array';
}

PM MAIL WWW ICQ Skype   Вверх
CruorVult
Дата 5.12.2012, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

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



Код

isArray = ('isArray' in Array) ? Array.isArray : function(value) {
    return toString.call(value) === '[object Array]';
}

PM MAIL Skype   Вверх
ksnk
Дата 5.12.2012, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



Aliance,  instanceof всего лишь бежит по цепочке прототипов. 
Ваш метод определения объектов точно так же не будет работать в примере их той статьи  smile. Вообще пример идиотский, учитывая свободу работы  с прототипами.
Цитата

...(например, из различных документов в web-браузере), так как их конструкторы и правда не будут конструкторами тех самых объектов.

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

Это сообщение отредактировал(а) ksnk - 5.12.2012, 14:50


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Amphiluke
Дата 5.12.2012, 15:31 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

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



Цитата(ksnk @  5.12.2012,  18:46 Найти цитируемый пост)
Смею предположить, что объект Array будет один и тот же даже для объектов из разных документов в одном броузере.


Можно проверить
Код

var ifr = $("<iframe src='about:blank'></iframe>").appendTo("body"),
    ifrWnd = ifr.contents()[0].defaultView;
alert(ifrWnd.Array === self.Array); // false
alert(ifrWnd.Object.prototype.toString.call(new ifrWnd.Array()) ===
    self.Object.prototype.toString.call(new self.Array())); // true


Это сообщение отредактировал(а) Amphiluke - 5.12.2012, 15:32
PM   Вверх
skyboy
Дата 5.12.2012, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Aliance @  5.12.2012,  13:17 Найти цитируемый пост)
ksnk, не очень хорошее решение, как мне кажется (объяснение).

в данном случае, у нас не с примитивами работа(да и то, new Object(someVariable) instanceof Number сработало б).
arg instanceof Array вполне себе работает, как и [] instanceof Array
PM MAIL   Вверх
Aliance
Дата 5.12.2012, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

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



Цитата(skyboy @  5.12.2012,  16:59 Найти цитируемый пост)
в данном случае, ... instanceof ... вполне себе работает

я этого и не отрицал

PM MAIL WWW ICQ Skype   Вверх
skyboy
Дата 5.12.2012, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Aliance @  5.12.2012,  16:00 Найти цитируемый пост)
я этого и не отрицал

что тогда означает:
Цитата(Aliance @  5.12.2012,  13:17 Найти цитируемый пост)
ksnk, не очень хорошее решение, как мне кажется (объяснение).

?
PM MAIL   Вверх
animegirl
Дата 5.12.2012, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Незнайка на Марсе
**


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

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



instanceof вариант работает хорошо, но вашу полемику читать интересно, узнаю много нового )


--------------------
Скажи миру - НЯ!
PM   Вверх
Aliance
Дата 6.12.2012, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

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



Цитата(skyboy @  5.12.2012,  20:51 Найти цитируемый пост)
что тогда означает

означает, что не смотря на то, что в данной конкретной ситуации и этот поход работать будет, я бы советовал сразу использовать "более правильный". Аргументацию я привел, дальше выбор за топикстартером  smile 
PM MAIL WWW ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




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


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

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