Кода -копия выглядит следующим образом:
a = new Array ();
b = новый массив (125624);
a.push.apply (a, b);
Приведенный выше код бросает следующее исключение под Mac Chrome
Кода -копия выглядит следующим образом:
Uncaught drangeerror: максимальный размер стека вызовов превышен
Если вы измените массив на B = новый массив (125623); Было бы здорово, если бы у вас был меньший элемент. Я проверил, что у других браузеров также есть проблемы с большими массивами, но критические значения разных браузеров все еще разные.
Я искал http://stackoverflow.com/questions/1374126/how-to-append-an-array-to-an-an-существующий javascript-array/17368101#17368101 и обнаружил, что кто-то столкнулся с такими ловушками:
Кода -копия выглядит следующим образом:
Array.prototype.extend = function (ore_array) {
/ * Вы должны включить тест, чтобы проверить, действительно ли другой - массив *//
other_array.foreach (function (v) {this.push (v)}, это);
}
Приведенные предложения должны быть честными и практическими преданием, что может не только избежать проблем с исключениями больших массивов, но и рассматривать эффективность Foreach как самые быстрые
Эта маленькая яма дала мне две мысли:
1. Некоторые причудливые использование, такие как A.Push.Apply (A, B); Этого достаточно, чтобы быть использованным, чтобы показать вопросы, когда вопросы интервью. На практике лучше выбрать честный путь, чтобы избежать столкновения аномалий и ловушек. Например, небольшое количество примеров макета Topology Topology 3D сети с десятками узлов в этой статье хорошо. Только когда вы сталкиваетесь с реальными большими объемами данных, такими как HT для примеров веб -производительности в этой статье, можете ли вы проверить проблему.
2. http://stackoverflow.com/questions/1374126 При поиске ответов от Stackoverflow не только сосредоточьтесь на тех, которые голосуют больше всего. Правда часто в руках нескольких человек. Ответ с 259 голосами на рисунке ниже - это яма, а 34 голоса - самый идеальный анализ: