Сейчас задумался над этими функциями. Слайс возвращает энное количество элементов массива начиная с какой-то позиции. Пример: Code: alert([1,2,3].slice(1, 3)); // выведет [2,3] Сплайс, по идее, должен делать тоже самое, только наоборот, то есть он удаляет выделенные элементы (ну или заменяет их) и возвращать должен именно измененный таким образом массив. Но возвращает он то же, что и слайс (да, он модифицирует массив, с которым работает, но почему-то возвращет не его, а срез). Пример: Code: alert([1,2,3].splice(1,2)); // выведет [2,3] Нафига так задумано? Зачем в ретурнах у них прописано у обоих функционал слайса? Какие-то костыли... UPD: И еще вопрос в догонку, как алиасить документ правильнее? Code: $ = function(){return document;}(); или просто Code: $ = document; Мне кажется второй вариант нельзя юзать.
Нет. Code: 15.4.4.10 Array.prototype.slice(start, [B]end[/B]) 15.4.4.12 Array.prototype.splice(start, [B]deleteCount[/B] ... ) Оба варианта вредны, первый избыточен. Code: ~function ($) { // your code }(document);
Ни нет, а да, сам протестируй. Слайс и сплайс отличаются между собой как субстр и субстринг - один вырезает по оффсету, другой с нулевой позиции. Но вопрос не в этом. Как я понимаю, функционал должен быть "вырезанием" из массива. То бишь возвращать, как можно логично предположить, должен именно обработанный массив. Но возвращает именно вырезанный кусок. Насчет алиасов понял, но не совсем. Зачем там побитовое отрицание перед функцией (~)?
Они работают так, как в спецификации указано. У функции slice второй параметр индекс. У splice - энное количество. Один из способов объявить FunctionExpression с целью сразу же вызвать. Выражение в JS не может начинаться с ключевого слова function.
astrologer, спасибо, конечно, за ответ, но ты не понимаешь сути вопроса моего - я просто непонимаю почему сплайс возвращает не модифицированный массив, а вырезанную часть этого массива. Ну да ладно, забили. А насчет ~ для меня это новое, просто всегда юзал (функция)(); и все... Ну типа: (function(){alert(1);})();
Наверное, потому что это срезы, полученные разными способами. И именно потому, что исходный массив модифицируется. Он обычно и так в переменной лежит, зачем дублировать, возвращая его же. Лучше срез. Так тоже можно, разумеется - исключительно вопрос удобства.
Если есть желание пообщаться на тему яваскрипта, оставь свою асю тут или в ПМ, есть еще пара вопросов.