который является лучшим методом для проверки isarray

1

Я хочу проверить переменную - это массив?

который лучше всего подходит для повышения производительности.

isArray

или

instanceof

  • 0
    Array.isArray был бы естественным способом и, вероятно, лучшим, если бы браузер его поддерживал.
  • 0
    Практически во всех случаях любая разница в производительности незначительна, и в любом случае, когда разница значима, вы можете просто измерить ее самостоятельно.
Теги:

2 ответа

3

Большие парни (JQuery, underscore) делают это так:

  isArray = Array.isArray || function(obj) {
    return Object.prototype.toString.call(obj) == '[object Array]';
  };

Но это не дроиды, которые вы ищете, вам это вообще не нужно. Не проверяйте свои переменные - просто знайте их.

  • 0
    Когда вы ссылаетесь на «больших парней», вы также должны сказать, что они поднимают метод var toString = Object.prototype.toString; ... Внутри функции: return toString.call(..
2

Array.IsArray лучше использовать.

Также проверьте этот instanceof, который считается вредным (или как писать надежный isArray)

Проблемы возникают, когда дело доходит до сценариев в многокадровом DOM сред. В двух словах объекты Array, созданные в пределах одного iframe не разделяйте [[Prototype]] s с массивами, созданными в другом IFrame. Их конструкторы - разные объекты, поэтому оба Не удалось выполнить проверку экземпляра и конструктора:

Также вы можете проверить изменение скорости между ними, и вы обнаружите, что isArray сравнительно быстрее.

Вот ссылка, чтобы проверить, что: Array.isArray vs instanceof Array

Ниже приведен код, чтобы проверить изменение скорости:

<script>
  Benchmark.prototype.setup = function() {
    var a = [1, 2, 3];
    var s = 'example';
    var f = false;
  };
</script>

Использование Array.IsArray:

(Array.isArray(a) && (Array.isArray(s) || Array.isArray(f)));

он выполнил почти 25,255,693 ops/sec

Теперь, используя instanceof: -

 (a instanceof Array && (s instanceof Array || f instanceof Array));

он выполнил почти 21,594,618 ops/sec

т.е. instanceOf на 15% медленнее, чем использование IsArray.

  • 2
    Другими словами, если вы используете isArray вы экономите 6.7 наносекунд.
  • 0
    @Juhana: - Точно. Хороший расчет! +1

Ещё вопросы

Сообщество Overcoder
Наверх
Меню