Я хочу проверить переменную - это массив?
который лучше всего подходит для повышения производительности.
isArray
или
instanceof
Большие парни (JQuery, underscore) делают это так:
isArray = Array.isArray || function(obj) {
return Object.prototype.toString.call(obj) == '[object Array]';
};
Но это не дроиды, которые вы ищете, вам это вообще не нужно. Не проверяйте свои переменные - просто знайте их.
var toString = Object.prototype.toString;
... Внутри функции: return toString.call(..
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.
isArray
вы экономите 6.7 наносекунд.