Js parseint описание. Преобразование данных в JavaScript. Пример: Использование parseInt

Операции с базой данных очень часто становятся узким местом при реализации веб проекта. Программистам нужно правильно выполнять структурирование таблиц, писать оптимальные запросы и более производительный код. В данной статье приводится небольшой список техник оптимизации работы с MySQL для программистов.

Вопросы оптимизации в таких случаях касаются не только администратора базы данных.

1. Оптимизируйте ваши запросы для кэша запросов.

Большинство серверов MySQL используют кэширование запросов. Это один из эффективных методов улучшения производительности, который выполняется механизмом базы данных в фоновом режиме. Если запрос выполняется много раз, то для получения результата начинает использоваться кэш и операция выполняется значительно быстрее.

Проблема заключается в том, что это так просто и в то же время скрыто от разработчика, и большинство программистов игнорирует такую прекрасную возможность улучшить производительность проекта. Некоторые действия в действительности могут создавать препятствия для использования кэша запросов при выполнении.

// Кэш запроса НЕ РАБОТАЕТ $r = mysql_query("SELECT username FROM user WHERE signup_date >= CURDATE()"); // Кэш запроса РАБОТАЕТ! $today = date("Y-m-d"); $r = mysql_query("SELECT username FROM user WHERE signup_date >= "$today"");

Причина того, что кэш запросов не работает в первом случае, заключается в использовании функции CURDATE() . Такой подход используется для всех недетерминированных функций, например, NOW(), RAND() и т.д. Так как возвращаемый результат функции может измениться, то MySQL решает не размещать данный запрос в кэше. Все что, нужно, чтобы исправить ситуацию - это добавить дополнительную строчку кода PHP перед запросом.

2. Используйте EXPLAIN для ваших запросов SELECT

Использование ключевого слова может помочь составить картину того, что делает MySQL для выполнения вашего запроса. Такая картина позволяет легко выявить узкие места и другие проблемы в запросах или структуре таблиц.

Результат запроса EXPLAIN показывает, какие индексы используются, как таблица сканируется и сортируется, и так далее.

Возьмем запрос SELECT (предпочтительно, чтобы он был сложным, с JOIN), добавим перед ним ключевое слово EXPLAIN. Вы можете использовать PhpMyAdmin для этого. Такой запрос выведет результат в прекрасную таблицу. Допустим, мы забыли добавить индекс для столбца, который используется для JOIN:

После добавления индекса для поля group_id:

Теперь вместо сканирования 7883 строк, будут сканироваться только 9 и 16 строк из двух таблиц. Хорошим методом оценки производительности является умножение всех чисел в столбце “rows”. Результат примерно пропорционален прорабатываемому объему данных.

3. Используйте LIMIT 1, если нужно получить уникальную строку

Иногда, во время использования запроса, вы уже знаете, что ищете только одну строку. Вы можете получить уникальную запись или просто проверить существование любого количества записей, которые удовлетворяют предложению WHERE.

В таком случае добавление LIMIT 1 к вашему запросу может улучшить производительность. При таком условии механизм базы данных останавливает сканирование записей как только найдет одну и не будет проходит по всей таблице или индексу.

// Есть ли какой нибудь пользователь из Алабамы? // Так не нужно делать: $r = mysql_query("SELECT * FROM user WHERE state = "Alabama""); if (mysql_num_rows($r) > 0) { // ... } // Вот так будет значительно лучше: $r = mysql_query("SELECT 1 FROM user WHERE state = "Alabama" LIMIT 1"); if (mysql_num_rows($r) > 0) { // ... }

4. Индексируйте поля поиска

Индексируйте не только основные и уникальные ключи. Если какие-нибудь столбцы в вашей таблице используются для поисковых запросов, то их нужно индексировать.

Как вы можете видеть, данное правило применимо и к поиску по части строки, например, “last_name LIKE ‘a%’”. Когда для поиска используется начало строки, MySQL может использовать индекс столбца, по которому проводится поиск.

Вам также следует разобраться, для каких видов поиска нельзя использовать обычное индексирование. Например, при поиске слова (“WHERE post_content LIKE ‘%apple%’”) преимущества индексирования будут не доступны. В таких случая лучше использовать или построение собственных решений на основе индексирования.

5. Индексирование и использование одинаковых типов для связываемых столбцов

Если ваше приложение содержит много запросов с директивой JOIN, вам нужно индексировать столбцы, которые связываются в обеих таблицах. Это оказывает эффект на внутреннюю оптимизацию операций связывания в MySQL.

Также связываемые столбцы должны иметь одинаковый тип. Например, если вы связываете столбец DECIMAL со столбцом INT из другой таблицы, MySQL не сможет использовать индекс по крайней мере для одной из одной таблицы. Даже кодировка символов должна быть одинаковой для одинаковых столбцов строчного типа.

// Поиск компании из определенного штата $r = mysql_query("SELECT company_name FROM users LEFT JOIN companies ON (users.state = companies.state) WHERE users.id = $user_id"); // оба столбца для названия штата должны быть индексированы // и оба должны иметь одинаковый тип и кодировку символов // или MySQL проведет полное сканирование таблицы

6. Не используйте ORDER BY RAND()

Это один их тех трюков, которые круто выглядят, и многие начинающие программисты попадают в его ловушку. Они даже представить не могут, какую ужасную проблему сами себе создают, начав использовать это выражение в своих запросах.

Если вам действительно нужно случайным образом располагать строки в результате вашего запроса, то существует множество лучших способов решить такую задачу. Конечно, это будет реализовано дополнительным кодом, но вы будете спасены от проблемы, которая растет по экспоненциальному закону вместе с ростом объема данных. Дело в том, что MySQL выполняет операцию RAND() (которая занимает время процессора) для каждой отдельной строки в таблице перед тем, как отсортировать ее и выдать вам только одну строку.

// Так делать НЕ НУЖНО: $r = mysql_query("SELECT username FROM user ORDER BY RAND() LIMIT 1"); // Вот так будет лучше работать: $r = mysql_query("SELECT count(*) FROM user"); $d = mysql_fetch_row($r); $rand = mt_rand(0,$d - 1); $r = mysql_query("SELECT username FROM user LIMIT $rand, 1");

Так вы получаете случайное число, которое меньше, чем количество строк в результате запроса, и используете его как смещение в предложении LIMIT.

7. Старайтесь не использовать SELECT *

Чем больше данных будет прочитано из таблицы, тем медленнее выполняется запрос. Такие операции также занимают время для выполнения дисковых операций. А если сервер базу данных отделен от веб сервера, то задержки будут вызваны еще и передачей данных по сети между серверами.

Хорошей привычкой является указание столбца при выполнении SELECT.

// Плохо: $r = mysql_query("SELECT * FROM user WHERE user_id = 1"); $d = mysql_fetch_assoc($r); echo "Welcome {$d["username"]}"; // Так лучше: $r = mysql_query("SELECT username FROM user WHERE user_id = 1"); $d = mysql_fetch_assoc($r); echo "Welcome {$d["username"]}"; // Разница становится существенной на больших объемах данных

8. Старайтесь использовать поле id везде

Хорошей практикой является использование в каждой таблице поля id, для которого установлены свойства PRIMARY KEY, AUTO_INCREMENT, и оно имеет тип из семейства INT. Предпочтительно - UNSIGNED, так как в этом случае значение не может быть отрицательным.

Даже если в вашей таблице есть поле с уникальным именем пользователя, не делайте его основным ключом. Поля с типом VARCHAR медленно работают в качестве основных ключей. Также структура вашей базы данных будет лучше, если в ней внутри использовать ссылки на записи на основании id.

Кроме того механизм MySQL использует основные ключи для своих внутренних задач, и использование поля id создает оптимальные условия для их решения.

Одним возможным исключением из данного правила являются “ассоциативные таблицы”, которые используются для отношений многие-ко-многим между двумя другими таблицами. Например, таблица “posts_tags” содержит 2 столбца: post_id, tag_id. Они используются для описания отношений между двумя таблицами “post” и “tags”. Описанная таблица может иметь основной ключ, который содержит оба поля id.

9. Используйте ENUM вместо VARCHAR

// Создаем подготовленное выражение if ($stmt = $mysqli->prepare("SELECT username FROM user WHERE state=?")) { // Привязываем параметры $stmt->bind_param("s", $state); // Выполняем $stmt->execute(); // Привязываем переменные результата $stmt->bind_result($username); // Получаем значения $stmt->fetch(); printf("%s is from %s\n", $username, $state); $stmt->close(); }

13. Небуферированные запросы

Обычно, когда вы выполняете запрос из скрипта, то работа скрипта прерывается до тех пор, пока запрос не будет выполнен. Такой порядок действий можно изменить с помощью небуферированных запросов.

Отличное объяснение функции из документации PHP:

“mysql_unbuffered_query() отправляет SQL запрос на сервер MySQL без автоматического получения и буферирования строк результата, как это делает функция mysql_query(). Таким образом, сохраняется определенный объем памяти запросами SQL, которые выдают большой набор результата, и можно начинать работать с набором результата сразу же после получения первой строки, не дожидаясь пока запрос SQL будет полностью выполнен.”

Однако существует несколько ограничений. Вы должны либо прочитать все строки либо вызвать перед тем, как выполнить следующий запрос. Также нельзя использовать или для набора результата.

14. Храните IP адрес как UNSIGNED INT

Многие программисты создают поле VARCHAR(15) для хранения IP адреса, даже не задумываясь о том, что будут хранить в этом поле целочисленное значение. Если использовать INT, то размер поля сократится до 4 байт, и оно будет иметь фиксированную длину.

Нужно использовать тип UNSIGNED INT, так как IP адрес задействует все 32 бита беззнакового целого.

$r = "UPDATE users SET ip = INET_ATON("{$_SERVER["REMOTE_ADDR"]}") WHERE user_id = $user_id";

15. Таблицы с фиксированной длиной записи (Static) работают быстрее

Когда каждый отдельный столбец в таблице имеет фиксированную длину, то вся таблица в целом рассматривается как . Примеры типов столбцов, которые не имеют фиксированной длины: VARCHAR, TEXT, BLOB. Если вы включите хотя бы один столбец с таким типом, то таблица перестает рассматриваться как "static" и будет по-другому обрабатываться механизмом MySQL.

Таблицы "static" быстрее обрабатываются механизмом MySQL при поиске записей. Когда нужно прочитать определенную запись в таблице, то ее положение быстро вычисляется. Если размер строки не фиксирован, то для определения положения записи нужно время на поиск и сопоставление с индексом основного ключа.

Такие таблицы также проще кэшировать и проще восстанавливать при сбоях. Но они могут занимать больше места. Например, если конвертировать поле VARCHAR(20) в поле CHAR(20), то всегда будут заняты 20 байт вне зависимости от того, используются они или нет.

Использование техники "Вертикальное разделение" дает возможность отделить столбцы с переменной длиной в отдельную таблицу.

16. Вертикальное разделение

Вертикальное разделение - это действие по разделению структуры таблицы по вертикали с целью оптимизации.

Пример 1 : У вас есть таблица, которая содержит домашние адреса, редко используемые в приложении. Вы можете разделить вашу таблицу и хранить адреса в отдельной таблице. Таким образом основная таблица пользователей сократится в размере. А как известно, меньшая таблица обрабатывается быстрее.

Пример 2 : У вас в таблице есть поле “last_login”. Оно обновляется каждый раз, когда пользователь регистрируется на сайте. Но каждое обновление таблицы вызывает кэширование запроса, что может создать перегрузку системы. Вы можете выделить данное поле в другую таблицу, чтобы сделать обновления таблицы пользователей не такими частыми.

Но надо быть уверенными в том, что не потребуется постоянного связывания двух таблиц, которые вы только что разделили, так как это может привести к ухудшению производительности.

17. Разделяйте большие запросы DELETE или INSERT

Если вам нужно выполнить большой запрос DELETE или INSERT на работающем сайте, то нужно быть осторожным, чтобы не нарушить трафик. Когда выполняется большой запрос, то он может заблокировать ваши таблицы и привести к остановке приложения.

Apache выполняет много параллельных процессов/потоков. по этой причине он работает более эффективно, когда скрипт заканчивает выполнение как можно быстрее, таким образом сервер не использует слишком много открытых соединений и процессов, потребляющих ресурсы, особенно память.

Если вы блокируете таблицы на продолжительное время (например, на 30 и более секунд) на высоко нагруженном веб сервере, вы можете вызвать накапливание процессов и запросов, что потребует значительного времени на расчистку или даже приведет к остановке вашего веб сервера.

Если у вас есть скрипт, который удаляет большое количество записей, просто используйте предложение LIMIT для разбиения его на маленькие партии, чтобы избежать описанной ситуации.

While (1) { mysql_query("DELETE FROM logs WHERE log_date <= "2009-10-01" LIMIT 10000"); if (mysql_affected_rows() == 0) { // выполняем удаление break; } // вы можете сделать небольшую паузу usleep(50000); }

18. Маленькие столбцы обрабатываются быстрее

Для механизма базы данных диск является наиболее важным узким местом. Стремление сделать все более компактным и маленьким обычно хорошо сказывается в сфере производительности за счет сокращения объема перемещаемых данных.

Документация MySQL содержит список для всех типов.

Если таблица будет содержать всего несколько строк, то нет причин делать основной ключ типа INT, а не MEDIUMINT, SMALLINT или даже TINYINT. если вам нужна только дата, используйте DATE вместо DATETIME.

Нужно только помнить о возможностях роста.

19. Выбирайте правильный механизм хранения данных

Есть два основных механизма хранения данных для MySQL: MyISAM и InnoDB. Каждый имеет свои достоинства и недостатки.

MyISAM отлично подходит для приложений с большой нагрузкой по чтению, но он не очень хорошо масштабируется при наличии большого количества записей. Даже если вы обновляете одно поле в одной строке, вся таблица будет заблокирована и ни один процесс не сможет ничего прочитать пока запрос не завершится. MyISAM быстро выполняет вычисления для запросов типа SELECT COUNT(*).

InnoDB является более сложным механизмом хранения данных, и он может быть более медленным, чем MyISAM для большинства маленьких приложений. Но он поддерживает блокирование строк, что лучше для масштабирования таблиц. Также он поддерживает некоторые дополнительные особенности, такие как транзакции.

20. Используйте объектно-реляционное отображение

Использование объектно-реляционного отображения (ORM - Object Relational Mapper) дает ряд преимуществ. Все, что можно сделать в ORM , можно сделать вручную, но с большими усилиями и более высокими требованиями к уровню разработчика.

ORM отлично подходит для "ленивой загрузки". Это означает, что получение значений возможно тогда, когда они нужны. Но нужно быть аккуратным, потому что можно создать много маленьких запросов, которые понизят производительность.

ORM может также объединять ваши запросы в транзакции, которые выполняются существенно быстрее, чем индивидуальные запросы к базе данных.

Для PHP можно использовать ORM .

21. Будьте осторожны с постоянными соединениями

Постоянные соединения предназначены для сокращения потерь на восстановление соединений к MySQL. Когда создается постоянное соединение, то оно остается открытым даже после завершения скрипта. Так как Apache повторно использует дочерние процессы, то процесс выполняется для нового скрипта, и он использует тоже соединение с MySQL.

Это звучит здорово в теории. Но в действительности это функция не стоит медного гроша из-за проблем. Она может вызывать серьезные неприятности с ограничениями количества соединений, переполнение памяти и так далее.

Apache работает на принципах параллельности, и создает множество дочерних процессов. Вот в чем заключается причина того, что постоянные соединения не работают как ожидается в данной системе. Прежде, чем использовать функцию mysql_pconnect(), проконсультируйтесь с вашим системным администратором.

Распознать в строке число и быть уверенным, что в алгоритме используется значение переменной, тип которой - число, необходимо почти в каждом алгоритме. Метод JavaScript parseInt решает эту задачу и позволяет распознавать числовые значения в популярных системах счисления.

Синтаксис метода parseInt

Метод принимает два параметра, второй из которых не обязательный. Результат работы - всегда число. Если первый параметр (строка) не содержит в начале символов системы счисления, то результатом будет NaN.

К цифрам шестнадцатеричной системы счисления относятся буквы: "a", "b", "c", "d", "e" и "f". Признаком восьмеричного числа является начальный "0", а шестнадцатеричного начальная пара "0x". Но не всегда преобразование будет выполнено верно, хотя синтаксически оно обозначено корректно.

Функция парсинга чисел - востребованная операция. В самом простом случае метод parseInt JavaScript и prompt позволяют фильтровать ввод правильных цифровых значений для принятия быстрых решений.

Примечание. Функция promt() - вводит то, что набрал посетитель в поле ввода, а не "результат" кнопок Ok или Cancel. Именно поэтому для получения быстрых значений можно на лету отследить содержание ввода посетителя и принять правильное решение.

Применение метода parseInt

Интернет-программирование имеет свою специфику и оказывает сильное влияние на идеи программирования вообще. Слияние маленьких данных в одно емкое "слово" - параметр, основные качества которого:

  • компактность;
  • быстрая распознаваемость.

Во многих случаях самые большие "любители" этого фактора CSS и HTML стали писать число, а затем сразу без пробела единицу измерения или знак препинания. Иначе говоря - составлять строгие символьные последовательности.

Регулярные выражения вообще, для непосвященного в таинства парсинга, представляют собой азбуку морзе, в которой каша из точек и тире "разведена" почти на все символы традиционного восьмибитного набора. Причем все, что не входит в видимую часть символьной таблицы, можно легко расписать кодами, то есть числами и буквами - это и есть метод JavaScript parseInt.

Многие параметры некоторых функций CSS не допускают пробело, и работают только тогда, когда они записаны исключительно по точному стандарту.

Язык XML при всей своей открытости не допускает вольностей при кодировании параметрической информации.

Примеров востребованности парсинга числовой информации можно привести множество вне пределов JavaScript, но это не играет роли. Значение метода JavaScript parseInt зависит от той роли, которую играет числовая информация и как ее стало принято представлять в самых разнообразных применениях.

Значение числового парсинга

Разбор информации - символьная процедура, но программирование сегодня - это все та же обработка числовой информации, как и три десятка лет назад. В прошлом не было JavaScript & parseInt. Но именно из опыта прошлого пришло знание об обработке числовой информации, был накоплен потенциал для регулярных выражений и других подобных идей.

В определенный период времени языки программирования допустили "вольности" в ключевых словах, "разблокировали" кириллицу и позволили разработчику обрабатывать слабо формализованные данные. Но этот период был краток, а с усилением интереса к объектно-ориентированному программированию образовалась "черная дыра" между тем:

  • как делать;
  • что делать.

Современный язык программирования вообще (хотя значение языка JavaScript трудно оценить в общем) обязан отделить инструмент работы от предмета работы. Инструмент должен быть точным и быстрым, а предмет работы может быть сколь угодно большим и практически неформализованным. Но результат работы программы с каждым моментом времени становится существеннее.

Разработка объектов без JavaScript parseInt - неоправданная трата сил, времени и кода. Методы объекта должны работать как часы, быстро и точно. Но предмет для работы объекта - информация, результат работы объекта - тоже информация. И понимать здесь под объектом вовсе не обязательно концепцию JavaScript, PHP или Python ... - это частные варианты и стили кодирования реальных объектов.

Функция parseInt() принимает строку в качестве аргумента и возвращает целое число в соответствии с указанным основанием системы счисления.

Синтаксис

parseInt(string , radix );

Параметры

string Значение, которое необходимо проинтерпретировать. Если значение параметра string не принадлежит строковому типу, оно преобразуется в него (с помощью абстрактной операции ToString). Пробелы в начале строки не учитываются. radix Целое число в диапазоне между 2 и 36, представляющее собой основание системы счисления числовой строки string , описанной выше. В основном пользователи используют десятичную систему счисления и указывают 10. Всегда указывайте этот параметр, чтобы исключить ошибки считывания и гарантировать корректность исполнения и предсказуемость результата. Когда основание системы счисления не указано, разные реализации могут возвращать разные результаты.

Возвращаемое значение

Целое число, полученное парсингом (разбором и интерпретацией) переданной строки. Если первый символ не получилось сконвертировать в число, то возвращается NaN .

Описание

Функция parseInt преобразует первый переданный ей аргумент в строковый тип, интерпретирует его и возвращает целое число или значение NaN . Результат (если не NaN) является целым числом и представляет собой первый аргумент (string), рассматривающийся как число в указанной системе счисления (radix). Например, основание 10 указывает на преобразование из десятичного числа, 8 - восьмеричного, 16 - шестнадцатеричного и так далее. Если основание больше 10 , то для обозначения цифр больше 9 используются буквы. Например, для шестнадцатеричных чисел (основание 16) используются буквы от A до F .

Если функция parseInt встречает символ, не являющийся числом в указанной системе счисления, она пропускает этот и все последующие символы (даже, если они подходящие) и возвращает целое число, преобразованное из части строки, предшествовавшей этому символу. parseInt отсекает дробную часть числа. Пробелы в начале и конце строки разрешены.

Так как некоторые числа включают символ e в своём строковом представлении (например, 6.022e23 ), то использование parseInt для усечения числовых значений может дать неожиданные результаты, когда используются очень малые или очень большие величины. parseInt не должна использоваться как замена для Math.floor() .

Если основание системы счисления имеет значение undefined (неопределено) или равно 0 (или не указано), то JavaScript по умолчанию предполагает следующее:

  • Если значение входного параметра string начинается с " 0x " или " 0X ", за основание системы счисления принимается 16, и интерпретации подвергается оставшаяся часть строки.
  • Если значение входного параметра string начинается с "0", за основание системы счисления принимается либо 8, либо 10, в зависимости от конкретной реализации. В спецификации ECMAScript 5 прописано использование 10 (десятичная система), но это поддерживается еще не всеми браузерами, поэтому необходимо всегда указывать основание системы счисления при использовании функции parseInt .
  • Если значение входного параметра string начинается с любого другого символа, система счисления считается десятичной (основание 10).

Если первый символ строки не может быть преобразован в число, parseInt возвращает значение NaN .

С точки зрения математики, значение NaN не является числом в какой-либо системе счисления. Чтобы определить, вернет ли parseInt значение NaN в качестве результата, можно вызвать функцию isNaN . Если NaN участвует в арифметических операциях, результатом также будет NaN .

Для преобразования числа в строку в указанной системе счисления, используйте intValue.toString(radix) .

Примеры

Пример: Использование parseInt

15 :

ParseInt(" 0xF", 16); parseInt(" F", 16); parseInt("17", 8); parseInt(021, 8); parseInt("015", 10); //parseInt(015, 10); вернёт 15 parseInt(15.99, 10); parseInt("FXX123", 16); parseInt("1111", 2); parseInt("15*3", 10); parseInt("15e2", 10); parseInt("15px", 10); parseInt("12", 13);

Все следующие примеры возвращают NaN :

ParseInt("Hello", 8); // Не является числом parseInt("546", 2); // Неверное число в двоичной системе счисления

Все следующие примеры возвращают -15 :

ParseInt("-F", 16); parseInt("-0F", 16); parseInt("-0XF", 16); parseInt(-15.1, 10) parseInt(" -17", 8); parseInt(" -15", 10); parseInt("-1111", 2); parseInt("-15e1", 10); parseInt("-12", 13);

Все следующие примеры возвращают 4 :

parseInt (4.7 , 10 ) ; parseInt (4.7 * 1e22 , 10 ) ; // Очень большие числа становятся 4 parseInt (0.00000000000434 , 10 ) ; // Очень маленькие числа становятся 4

Следующий пример возвращает 224 :

ParseInt("0e0", 16);

Восьмеричная интерпретация без указания системы счисления

Хотя это не поощряется в спецификацией ECMAScript 3 и запрещено в ECMAScript 5, многие реализации интерпретируют числовую строку, начинающуюся с 0 , как восьмеричную. Следующий пример может иметь как восьмеричный, так и десятичный результат. Чтобы избежать непредвиденного результата, всегда указывайте основание системы счисления.

ParseInt("0e0"); // 0 parseInt("08"); // 0, "8" не является цифрой в восьмеричной системе.

ECMAScript 5 устраняет восьмеричную интерпретацию

Спецификация ECMAScript 5 функции parseInt больше не разрешает трактовать в восьмеричной системе счисления строки, начинающиеся с 0 . ECMAScript 5 провозглашает:

Функция parseInt производит целочисленное значение в результате интерпретации содержимого строкового аргумента в соответствии с указанным основанием системы счисления. Пробел в начале строки не учитывается. Если основание системы счисления не определено или равно 0 , оно считается равным 10 , за исключением случаев, когда строка начинается с пар символов 0x или 0X: тогда за основание принимается 16. Если основанием системы счисления указано 16 , число также может начинаться с пар символов 0x или 0X .

В этом ECMAScript 5 расходится со спецификацией ECMAScript 3, в которой восьмеричная интерпретация не поощрялась, но и не была запрещена.

Поскольку на момент 2013 года описанное выше поведение было применено не во всех реализациях, а поддержка старых браузеров является необходимой, всегда указывайте основание системы счисления.

Более строгая функция интерпретации

Иногда необходим более строгий способ интерпретации целочисленных значений. В этом могут помочь регулярные выражения:

Var filterInt = function (value) { if (/^(\-|\+)?(+|Infinity)$/.test(value)) return Number(value); return NaN; } console.log(filterInt("421")); // 421 console.log(filterInt("-421")); // -421 console.log(filterInt("+421")); // 421 console.log(filterInt("Infinity")); // Infinity console.log(filterInt("421e+0")); // NaN console.log(filterInt("421hop")); // NaN console.log(filterInt("hop1.61803398875")); // NaN console.log(filterInt("1.61803398875")); // NaN

Спецификация

Спецификация Статус Комментарий
ECMAScript 1st Edition (ECMA-262) Стандарт Изначальное определение.
ECMAScript 5.1 (ECMA-262)
Стандарт
ECMAScript 2015 (6th Edition, ECMA-262)
Определение "parseInt" в этой спецификации.
Стандарт
ECMAScript Latest Draft (ECMA-262)
Определение "parseInt" в этой спецификации.
Черновик

Поддержка браузерами

The compatibility table on this page is generated from structured data. If you"d like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.

Update compatibility data on GitHub

Компьютеры Мобильные Server
Chrome Edge Firefox Internet Explorer Opera Safari Android webview Chrome для Android Edge Mobile Firefox для Android Opera для Android Safari on iOS Samsung Internet Node.js
Базовая поддержка Chrome Полная поддержка Да Edge Полная поддержка Да Firefox Полная поддержка 1 IE Полная поддержка Да Opera Полная поддержка Да Safari Полная поддержка Да WebView Android Полная поддержка Да Chrome Android Полная поддержка Да Edge Mobile Полная поддержка Да Firefox Android Полная поддержка 4 Opera Android Полная поддержка Да Safari iOS Полная поддержка Да Samsung Internet Android Полная поддержка Да nodejs Полная поддержка Да
Parses leading-zero strings are decimal, not octal Chrome Полная поддержка 23 Edge Полная поддержка Да Firefox Полная поддержка 21 IE Полная поддержка 9 Opera Полная поддержка Да Safari Полная поддержка 6 WebView Android Полная поддержка 4.4 Chrome Android Полная поддержка Да Edge Mobile Полная поддержка Да Firefox Android Полная поддержка 21 Opera Android Полная поддержка Да Safari iOS Полная поддержка 6 Samsung Internet Android Полная поддержка Да nodejs Полная поддержка Да

Функция ParseInt предназначена для преобразования в JavaScript строки в число. Метод принимает в качестве аргумента строчное значение и преобразует его в число без знаков после запятой, или в качестве альтернативы выдается значение NaN . ParseInt принимает два аргумента. Второй параметр определяет систему исчисления, которая будет использоваться при преобразовании значения строки в число.

Простой пример с использованием десятичной системы исчисления выглядит следующим образом:

var x = "1"; console.log(x, typeof x); //1 строка x = parseInt(x, 10); console.log(x, typeof x); //1 число Онлайн пример кода

Если для значения системы исчисления аргумент не передается, будет использоваться значение по умолчанию (базовая десятичная система ). Также можно задать значение 2 , чтобы указать функции использовать двоичную систему исчисления. Значение 8 указывает ParseInt использовать восьмеричную систему, а значение 16 указывает — шестнадцатеричную. Для систем исчисления с основанием больше 10 вместо чисел больше 9 используются буквы алфавита.

Перед тем, как в JavaScript преобразовать строку в число, рассмотрим пример преобразования двоичного числа в целое число в десятичной системе исчисления:

var x = 10; x = parseInt(x, 2); console.log(x); //2 Онлайн пример кода

Переменная х получает значение 10 . В двоичной системе значение 10 (то есть, «один, ноль» ) эквивалентно 2 в десятичной системе. Мы передали в функцию ParseInt 10 и указали в качестве системы исчисления двоичную. Функция вернула значение 2 , которое является целым числом, эквивалентным «один, ноль «.

А что произойдет, если мы передадим в функцию ParseInt десятичное число с одним или несколькими знаками после запятой? Давайте посмотрим:

var x = 3.14; x = parseInt(x, 10); console.log(x); //3 Онлайн пример кода

Функция ParseInt приняла числовое значение со знаками после запятой и привела его к целому. Но, что если нужно осуществить в JavaScript преобразование строки в число? Вот пример:

var x = "Hola World!"; x = parseInt(x, 10); console.log(x); //NaN ...или Not a Number Онлайн пример кода

Если в ParseInt передается аргумент, который не может быть просто преобразован в числовое значение, то возвращаемое значение будет — NaN (или не число ). Если в функцию передается сочетание числовых и буквенных строковых значений, то она будет преобразовывать числовые символы в целые числа и отбрасывать остальные:

var x = "123UnoDosTres";

Explore JavaScript Courses

x = parseInt(x, 10); console.log(x); //123 Онлайн пример кода

Это основные принципы использования функции ParseInt . Следует помнить, что основная цель ParseInt – JavaScript перевод строки в число (без знаков после запятой ). Также можно указать систему исчисления, которую нужно использовать. Если функции передается значение, которое не может быть преобразовано в число, то ParseInt возвращает значение NaN .

Дополнительную информацию о JavaScript-функции ParseInt можно найти здесь .

Перевод статьи «Using the JavaScript ParseInt Method » был подготовлен дружной командой проекта .

Хорошо Плохо