Jump to content

breca

Neophyte
  • Posts

    3
  • Joined

  • Last visited

Information

  • Sex
    мужской
  • From
    Украина, Ровно

breca's Achievements

Explorer

Explorer (1/14)

0

Reputation

  1. UPD: Ответ писал без учёта комментария г-на Tilonorrinco. Найден самый просто способ решения данной проблемы: Ссылка jsfiddle Спасибо, Tilonorrinco.
  2. Итак, хотя я и сам разобрался с вопросом, считаю обязанностью сообщить что, как и почему. В первую очередь: Вопрос был задан совершенно некорректно, но это лишь по незнанию. Короче говоря, сам метод Math здесь совершенно не причём. Проблема заключалась в принципе работы JS (возможно и других языков, мне доподлинно не известно). Разбор и решение проблемы будет немного ниже. С решением мне помогла статья: "Объекты: передача по ссылке". Если коротко пересказать статью, то: 1. Обычные значения: строки, числа, булевы значения, null/undefined при присваивании переменных копируются целиком или, как говорят, «по значению». 2. В переменной, которой присвоен объект, хранится не сам объект, а «адрес его места в памяти», иными словами – «ссылка» на него. Очень хорошо этот принцип демонстрирует простенький код: var time = { year: 2345, month: 11, day: 10, hour: 11, minute: 12, second: 13, microsecond: 123456 } console.log(time); // (*) time.microsecond++; // (**) console.log(time); time.microsecond++; console.log(time); time.microsecond++; Результат работы скрипта виден на скриншоте: Вместо "123457, 123458, 123459" мы видим "123459" все три раза. Это происходит, потому что что вывод не делает «копию» текущего содержимого, а сохраняет лишь ссылку на объект. Если остановить код через отладчик, ми получим следующую картину: - После первого якоря мы увидим: - После второго якоря мы увидим: - После третьего якоря мы увидим: Если перенести доступные мне теперь знания, на мой код и вывести в консоль значение массива numberArray document.write(numberArray + "<strong> Изначальное значение </strong><br><br>"); console.log(numberArray); tomath(numberArray,metod1); console.log(numberArray); document.write("<br>"); tomath(numberArray,metod2); console.log(numberArray); document.write("<br>"); tomath(numberArray,metod3); console.log(numberArray); document.write("<br>"); мы увидим: Следовательно, мы питаемся закруглить уже закругленные значения. Методы решения: - Самый простой и очевидный - это добавить несколько новых массивов: var numberArray = [34.82, 12.90, 17.01, 78.51]; var numberArray2 = [34.82, 12.90, 17.01, 78.51]; var numberArray3 = [34.82, 12.90, 17.01, 78.51]; var metod1 = "round"; var metod2 = "ceil"; var metod3 = "floor"; tomath(numberArray,metod1); document.write("<br>"); tomath(numberArray2,metod2); document.write("<br>"); tomath(numberArray3,metod3); document.write("<br>"); - Написать функцию для ввода значений массива с клавиатуры, тогда будет создаваться "клон" переменной с масивом: Скрипт с функцией для ввода на jsfiddle.
  3. Здравствуйте. Я только изучаю JS и столкнулся с очень интересной проблемой, не знаю как решить. Суть: Задача была написать функцию которая принимает два параметра. 1. Массив, состоящий из чисел с дробями. 2. Метод округления "round", "ceil" или "floor". На выходе функция должна выводить этот же массив, но при этом все элементы массива, должны быть округлены с помощью указанного во втором параметре метода объекта Math. Казалось бы, что задача пустяковая и решается за одну минуту. Так оно и было бы, если бы я не решил проверить решение запустив три раза подряд написанную мной функцию для 3 разных методов. В результате я получил все три раза скругление по методу round, вместо round, ceil, floor. Скрипт по ссылке: jsfiddle Также я попытался зайти с другой стороны и написал скрипт немного иначе, получив тот же результат. Скрипт по ссылке: jsfiddle Потратив некоторое время на поиск проблемы, я дошел до того, что функция работает правильно, но только если запустить ее 1 раз, только для одного метода. Запуск только одного метода по ссылке: jsfiddle В итоге получается, что если запустить эту функцию несколько раз, то метод для Math принимается тот, который был запущен первым. Объясните пожалуйста, почему так происходит. З.Ы. На всякий случай, если ссылки будут битыми (этим сервисом пользуюсь первый раз), оставлю код в прикреплённых файлах. script.html
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy