- •Введение в JavaScript
- •Что такое JavaScript?
- •Что умеет JavaScript?
- •Что не умеет JavaScript?
- •В чем уникальность JavaScript?
- •Тенденции развития.
- •Недостатки JavaScript
- •Альтернативные технологии
- •ActiveX/npapi, плагины и расширения для браузера
- •Книги по js, html/css и не только
- •Объектно-ориентированное программирование
- •Уровни поддержки
- •Современный doctype
- •Справочники, и как в них искать
- •Спецификация ecmaScript
- •Спецификации html5
- •Редакторы для кода
- •Лёгкие редакторы
- •Sublime Text: шпаргалка
- •Горячие клавиши
- •Плагины
- •Установка и настройка браузеров
- •Установка
- •Включите консоль
- •Просмотр ошибок
- •Включаем отладку
- •Просмотр ошибок
- •Другие браузеры
- •Как поставить несколько версий браузеров?
- •Привет, мир!
- •Внешние скрипты
- •Структура кода
- •Команды
- •Комментарии
- •Переменные
- •Переменная
- •Аналогия из жизни
- •Копирование значений
- •Важность директивы var
- •Константы
- •Имена переменных
- •Зарезервированные имена
- •Правильный выбор имени
- •Имена переменных
- •Имена переменных
- •Зарезервированные имена
- •Правильный выбор имени
- •Введение в типы данных
- •Типы данных
- •Основные операторы
- •Термины: «унарный», «бинарный», «операнд»
- •Арифметические операторы
- •Присваивание
- •Приоритет
- •Побитовые операторы
- •Вызов операторов с присваиванием
- •Оператор запятая
- •Операторы сравнения и логические значения
- •Логические значения
- •Сравнение строк
- •Сравнение разных типов
- •Строгое равенство
- •Сравнение с null и undefined
- •Комментарии
- •Добавить комментарий
- •Комментариев: (14)
- •Побитовые операторы
- •Формат 32-битного целого числа со знаком
- •Список операторов
- •Описание работы операторов
- •& (Побитовое и)
- •| (Побитовое или)
- •Операторы битового сдвига
- •Применение побитовых операторов
- •Описание доступов
- •Проверка доступов
- •Маски в функциях
- •Округление
- •Проверка на -1
- •Умножение и деление на степени 2
- •Взаимодействие с пользователем: alert, prompt, confirm
- •Особенности встроенных функций
- •Комментарии
- •Добавить комментарий
- •Комментариев: (32)
- •Условные операторы: if, '?'
- •Оператор if
- •Преобразование к логическому типу
- •Неверное условие, else
- •Несколько условий, else if
- •Оператор вопросительный знак '?'
- •Несколько операторов '?'
- •Нетрадиционное использование '?'
- •Логические операторы
- •Короткий цикл вычислений
- •Значение или
- •Циклы while, for
- •Цикл while
- •Цикл do..While
- •Цикл for
- •Директивы break и continue
- •Выход: break
- •Следующая итерация: continue
- •Конструкция switch
- •Синтаксис
- •Пример работы
- •Группировка case
- •Тип имеет значение
- •Функции
- •Объявление
- •Локальные переменные
- •Внешние переменные
- •Параметры
- •Аргументы по умолчанию
- •Стиль объявления функций
- •Возврат значения
- •Выбор имени
- •Рекурсия, стек
- •Реализация pow(X, n) через рекурсию
- •Контекст выполнения, стек
- •Задачи на рекурсию
- •Методы и свойства
- •Пример: str.Length, str.ToUpperCase()
- •Пример: num.ToFixed
- •Всё вместе: особенности JavaScript
- •Структура кода
- •Переменные и типы
- •Взаимодействие с посетителем
- •Особенности операторов
- •Логические операторы
- •Конструкция switch
- •Функции
- •Методы и свойства
Методы и свойства
Пример: str.length, str.toUpperCase()
Пример: num.toFixed
Все значения в JavaScript, за исключением null и undefined, содержат набор вспомогательных функций и значений, доступных «через точку».
Такие функции называют «методами», а значения — «свойствами». Посмотрим на примеры.
Пример: str.Length, str.ToUpperCase()
У строки есть свойство length, содержащее длину:
alert( "Привет, мир!".length ); // 12 |
Еще у строк есть метод toUpperCase(), который возвращает строку в верхнем регистре:
var hello = "Привет, мир!"; |
|
|
|
alert( hello.toUpperCase() ); // "ПРИВЕТ, МИР!" |
Если через точку вызывается функция (toUpperCase()) — это называют «вызов метода», если просто читаем значение (length) — «получение свойства».
Пример: num.ToFixed
У чисел есть метод num.toFixed(n). Он округляет число num до n знаков после запятой, при необходимости добивает нулями до данной длины и возвращает в виде строки (удобно для форматированного вывода):
var n = 12.345; |
|
|
|
alert( n.toFixed(2) ); // "12.34" |
|
alert( n.toFixed(0) ); // "12" |
|
alert( n.toFixed(5) ); // "12.34500" |
Детали работы toFixed разобраны в главе Числа.
Обращение к методам чисел
К методу числа можно обратиться и напрямую:
alert( 12.34.toFixed(1) ); // 12.3 |
..Но если число целое, то будет проблема:
alert( 12.toFixed(1) ); // ошибка! |
Ошибка произойдёт потому, что JavaScript ожидает десятичную дробь после точки.
Это — особенность синтаксиса JavaScript. Вот так — будет работать:
alert( 12..toFixed(1) ); // 12.0 |
Вызов метода — через круглые скобки!
Обратите внимание, вызов метода идёт через круглые скобки. Вообще-то, можно попробовать и без них, но результат будет совсем другой.
Метод — это функция, привязанная к значению. Если обратиться к ней без скобок, то результатом будет сама функция.
Непонятно? Посмотрите, например, результат обращения к toUpperCase без скобок:
var hello = "Привет"; |
|
|
|
alert( hello.toUpperCase ); // function... |
Этот код выводит значение свойства toUpperCase, которое является встроенной в язык функцией. Как правило браузер выводит его как-то так: "function toUpperCase() { [native code] }".
Для получения результата эту функцию необходимо вызвать, поэтому и обращение делается со скобками:
var hello = "Привет"; |
|
|
|
alert( hello.toUpperCase() ); // "ПРИВЕТ" (результат вызова) |
Мы еще встретимся со строками и числами в последующих главах и глубже познакомимся со средствами для работы с ними.
‹ Рекурсия, стек Всё вместе: особенности JavaScript ›
15.04.2012
Илья Кантор
Alexy
toFixed очень криво работает. Пример: 5.5.toFixed(0) вернёт 6 (т.е. правильно окргуляет) 5.35.toFixed(1) вернёт 5.3(что не правильно! по правилам математики округление должно идти в большую сторону) Однако 5.3500009.toFixed(1) уже вернёт 5.4. 5.36.toFixed(1) соответственно тоже вернёт 5.4.
SennaTOR
От браузера зависит. В IE 9 выдает 5.4, в Chrome 5.3, Firefox - 5.3, Opera - 5.3.
Вадим
Видимо кто-то совсем в школе не учился)) почитай правила округления!
Если первая из отбрасываемых цифр больше 5, то последняя из сохраняющихся цифр увеличивается на 1. Если первая из отбрасываемых цифр равна 5, а за ней следуют одна или несколько значащих цифр, то последняя из сохраняющихся цифр также увеличивается на 1. Если первая из отбрасываемых цифр меньше 5, то последняя из сохраняемых цифр остаётся неизменной. Если отбрасывается цифра 5, а за ней нет и никогда не было значащих цифр, то последняя из сохраняемых цифр остаётся неизменной, если она чётная, и увеличивается на 1, если она нечётная.
Alexy
Скорее всего корни у этого от туда же, что и у примера от KpuBopy4ko в примере ниже.
KpuBopy4ko
Почему при вызове функции
alert( 12.34.toFixed(17) ); выдаст 12.3399999999999986
Max Korzilov
скорее всего это связано с внутренним представлением дробного числа в компьютере. Когда ты просишь его уточнить число до N-ого после запятой, то он перестает округлять, и выдает так, как "посчитал"
Tadevosyan
Есть и метод toLowerCase() , который возвращает строку в нижнем регистре))
Hixer
А задачи? А ссылки на справочники? После рекурсии уже чего-то посерьёзнее мозг требует! :)
Александр Белец
пока отдохнуть надо людям :)
Anchak
Ошибка в коментариях ( alert( n.toFixed(2) ); // "12.34" ) там будет 12.35
George Marchenko
Наверное, Илья решил оставить это на потом, но я бы добавил этот метод сюда. toLowerCase() — осуществляет действие, обратное toUpperCase(). Просто для практики, раз уж его аналог в этом разделе описан.
Tyrgor
А у меня .toFixed(n) работает нормально и для целочисленных значений без вывода ошибки как написано. Выводит просто полученное целое число вообще без дробной части (как и положено). Тестировал в Опере и ФФ. Но тут появился вопрос: вот я поставил x.toFixed(3), а, к примеру, у меня х = 0,000000123...; т.е мне выдает 0,000. Так вот, как можно попроще прописать, чтоб при таком варианте выдавало ну хоть 0,0000001?
Tyrgor
Хотя нет...странно...работает через раз. Точнее ошибки нет, выдает все время ответ при целых числах, но через раз - то без десятичной части, то с десятичной (с нулями после точки).
Baranovskiy O A
И я не понял что конкретно выводит toFixed, по мне так непонятно написано.
eee
Округляет число до нужного количества цифр после запятой. И результат переводит в строку
например для этого var n = 0.1+0.2; alert(n); //Разница есть!alert(n.toFixed(1));
