Запрос данных из базы — Python: Django ORM
Одна из задач, которую берут на себя ORM – это построение произвольных SQL-запросов в базу данных. Вот как это делается с помощью Django ORM:
# SELECT * FROM users WHERE name = "John" ORDER BY last_name DESC LIMIT 10 users = User.objects.filter( # WHERE first_name='John', ).order_by( # ORDER BY '-last_name' )[:10] # LIMIT for user in users: print(user.last_name)
Менеджер и Запросы
На текущем этапе важно познакомиться с двумя терминами, которые используются повсеместно, когда речь идёт о построении запросов в Django ORM: Менеджер (Manager) и Запрос (QuerySet). Manager отвечает за связь модели как Python-класса с фактическим представлением данных в соответствующей таблице БД, а также позволяет программисту строить запросы (QuerySets) к этой таблице и создавать в ней новые записи. Помимо построения запросов, менеджер интерпретирует их результаты. Например, представляет данные из базы в виде экземпляров класса модели. У любой модели есть хотя бы один менеджер — тот, что доступен через атрибут .objects класса модели. В примере выше User.objects — менеджер модели User .
С методом .create() менеджера вы уже встречались на предыдущем уроке. Этот метод создает новые записи в таблице. Большинство же других методов начинают построение запроса — значения типа QuerySet . Каждый подобный метод возвращает новый QuerySet, запоминающий новые параметры будущего запроса. В примере цепочка вызовов .filter(..).order_by(..) конструирует запрос по шагам. И даже взятие среза ( [:10] ) только уточняет запрос, также создавая новый QuerySet .
Обратите внимание: сам SQL-запрос сразу не выполняется. Для того, чтобы выполнить SQL-запрос или, как говорят, «финализировать», нужно начать итерацию результатов или обратиться к одному из «элементов» имеющегося QuerySet по индексу. В примере SQL-запрос выполняется в тот момент, когда цикл for пробует получить от users первый элемент.
Построение запросов с помощью методов
Пока запрос не финализирован, его можно свободно сохранять в переменные или передавать из одного участка кода в другой и строить новые QuerySets на основе сохранённого:
johns = User.objects.filter(first_name='John') # все Джоны connors = johns.filter(last_name='Connor') # только Джоны Конноры others = johns.exclude(last_name='Connor') # Джоны, но не Конноры
Здесь представлено три QuerySets, причём второй и третий построены на основе первого. И ни один из них ещё не финализирован.
Обратите внимание: первый вызов в цепочке всегда относится к менеджеру, каким бы ни был метод
Порядок вызова методов не важен. Сначала можно сортировать, а потом фильтровать:
users = User.objects.order_by( '-last_name', # "-" означает "по убыванию" ).filter( first_name='John', ) # SELECT * FROM users WHERE first_name = "John" ORDER BY last_name DESC
Django ORM самостоятельно расставит все части в правильном порядке. Однако, несмотря на такую заботу, всё же рекомендуется везде, где это возможно, соблюдать ожидаемый порядок вызовов. Это упростит чтение кода.
Многие вызовы могут накапливаться. Цепочка из filter породит в SQL-запросе одну часть WHERE , где все условия объединены с помощью оператора AND :
User.objects.filter(first_name='John').filter(age=34).exclude(city='Moscow') # WHERE first_name = "John" AND age = 34 AND NOT (city = "Moscow")
Но некоторые методы не накапливаются. Например, каждый последующий вызов .order_by() заменяет ранее указанное правило сортировки на новое! Это позволяет описать и сохранить сортировку по умолчанию, оставив возможность её подменить, если понадобится.
В языке запросов Django ORM есть по методу на каждую часть SQL. Некоторые из них в таблице ниже:
| метод | SQL |
|---|---|
| .filter() , .exclude() | WHERE |
| .order_by() | ORDER |
| [:] | LIMIT / OFFSET |
Мы рассмотрим только некоторые из них. Остальные достаточно легко понять из документации, если вы знаете SQL. Если это не так, рекомендуем пройти курс основы баз данных.
.filter() — наиболее часто используемая операция при построении запросов. Метод .exclude() во всём похож на .filter() и лишь добавляет NOT к условию, то есть инвертирует оное. Взглянем на примеры фильтрации:
# WHERE votes = 100 User.objects.filter(votes=100) # WHERE votes >= 100 User.objects.filter(votes__gte=100)
Обратите внимание на то, как закодировано нестрогое равенство: «__gte» — двойное подчёркивание плюс сокращение от «greater than or equal». В Django условия принято указывать в виде именованных аргументов, а в их именах нельзя использовать символы вроде » < ", поэтому потребовались сокращения. Двойное подчёркивание однозначно отделяет имя поля от оператора — его ещё называют "lookup". А двойное оно потому, что имена полей могут содержать одиночные символы подчёркивания ("last_name").
Помимо проверок на неравенство, таких как __gte , Django поддерживает множество других lookups. Вот некоторые из них:
User.objects.filter( id__in=[45, 101, 512], # равно одному из значений списка (входит В список) first_name__iexact='John', # равно без учёта регистра age__range=(18, 21), # входит в диапазон 18..21 middle_name__isnull=True, # необязательное поле не заполнено last_name__icontains='ibn' # содержит подстроку без учёта регистра )
Менеджеры и итерация
Выше было сказано, что QuerySet превращается в SQL-запрос при обращении к его элементам по индексу или при запуске процесса итерации. К менеджеру это, увы, не относится и для того, чтобы сделать запрос, нужен хотя бы какой-нибудь QuerySet .
Именно поэтому периодически возникают ошибки вроде «‘Manager’ is not iterable» или «‘Manager’ is not subscriptable» в процессе выполнения кода вида for u in User.objects: .. или User.objects[0] . Как только вы вызовите хотя бы один метод, уточняющий запрос, вы получите в ответ QuerySet и проблема решится сама собой. Взятие среза к менеджеру, увы, не применимо, потому что это подвид обращения по индексу (subscription protocol).
Если же вам не нужно уточнять запрос и вы действительно хотите работать со всеми записями, то используйте метод .all() , который для менеджера вернёт QuerySet без дополнительных условий. Если же вызвать .all() у имеющегося QuerySet , то тот просто «вернёт себя». Так что бояться метода .all() не следует, его вызов вовсе не означает «запросить всё»!
Зачем?
Для чего нужен такой язык, почему недостаточно SQL? На это есть несколько разных причин:
- Универсальность. Django ORM способна генерировать SQL, подходящий под конкретную базу данных. Построение запросов же не привязано к базе данных. Хотя это не отменяет ситуаций, в которых приходится выполнять «сырые» запросы в базу данных.
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях:
Как сделать вывод данных из базы данных в переменную python?
global ID
OrderNumber FROM orders ORDER BY OrderNumber DESC LIMIT 1;»»»).fetchall()
#list to tuple
#tuple to char
#char to int
cursor.execute(«UPDATE orders SET cost = ? WHERE OrderNumber = ?», (cost, ID))
connect.commit()
Это единтственный способ которым у меня получилось засунуть данные из БД в переменную, которая должна быть Integer, что бы следуйщий запрос на обновление работал коректно. Самое главное, то что в бд это поле уже Integer. Код работает, но я хочу разобраться нельзя ли его упростить и сделать правильным?
- Вопрос задан более года назад
- 292 просмотра
4 комментария
Простой 4 комментария
С no как вызвать переменную из бд
Когда происходит отправка данных формы PHP-скрипту, информация из этой формы автоматически становится доступной ему. Существует несколько способов получения этой информации, например:
Пример #1 Простая HTML-форма
Есть только два способа получить доступ к данным из форм HTML. Доступные сейчас способы приведены ниже:
Пример #2 Доступ к данным из простой HTML-формы, отправленной через POST
echo $_POST [ ‘username’ ];
echo $_REQUEST [ ‘username’ ];
?>?php
GET-форма используется аналогично, за исключением того, что вместо POST, вам нужно будет использовать соответствующую предопределённую переменную GET. GET относится также к QUERY_STRING (информация в URL после ‘?’). Так, например, http://www.example.com/test.php?id=3 содержит GET-данные, доступные как $_GET[‘id’] . Смотрите также $_REQUEST .
Замечание:
Точки и пробелы в именах переменных преобразуется в знаки подчёркивания. Например, станет $_REQUEST[«a_b»] .
PHP также понимает массивы в контексте переменных формы (смотрите соответствующие ЧАВО). К примеру, вы можете сгруппировать связанные переменные вместе или использовать эту возможность для получения значений списка множественного выбора select. Например, давайте отправим форму самой себе, а после отправки отобразим данные:
Пример #3 Более сложные переменные формы
if ( $_POST ) echo ‘
' ;
echo htmlspecialchars ( print_r ( $_POST , true ));
echo '
‘ ;
>
?>
?php
Замечание: Если внешнее имя переменной начинается с корректного синтаксиса массива, завершающие символы молча игнорируются. Например, станет $_REQUEST[‘foo’][‘bar’] .
Имена переменных кнопки-изображения
При отправке формы вместо стандартной кнопки можно использовать изображение с помощью тега такого вида:
Когда пользователь щёлкнет где-нибудь на изображении, соответствующая форма будет передана на сервер с двумя дополнительными переменными — sub_x и sub_y . Они содержат координаты нажатия пользователя на изображение. Опытные программисты могут заметить, что на самом деле имена переменных, отправленных браузером, содержат точку, а не подчёркивание, но PHP автоматически преобразует точку в подчёркивание.
HTTP Cookies
PHP прозрачно поддерживает HTTP cookies как определено в » RFC 6265. Cookies — это механизм для хранения данных в удалённом браузере и, таким образом, отслеживания и идентификации вернувшихся пользователей. Вы можете установить cookies, используя функцию setcookie() . Cookies являются частью HTTP-заголовка, поэтому функция SetCookie должна вызываться до того, как браузеру будет отправлен какой бы то ни было вывод. Это то же ограничение, что и для функции header() . Данные, хранящиеся в cookie, доступны в соответствующих массивах данных cookie, таких как $_COOKIE и $_REQUEST . Подробности и примеры смотрите в справочной странице setcookie() .
Замечание: Начиная с PHP 7.2.34, 7.3.23 и 7.4.11, соответственно, имена входящих cookie больше не декодируются из URL-закодированной строки из соображений безопасности.
Если вы хотите присвоить множество значений одной переменной cookie, вы можете присвоить их как массив. Например:
setcookie ( «MyCookie[foo]» , ‘Testing 1’ , time ()+ 3600 );
setcookie ( «MyCookie[bar]» , ‘Testing 2’ , time ()+ 3600 );
?>?php
Это создаст две разные cookie, хотя в вашем скрипте MyCookie будет теперь одним массивом. Если вы хотите установить именно одну cookie со множеством значений, сначала рассмотрите возможность использования к значениям такие функции, как serialize() или explode() .
Обратите внимание, что cookie заменит предыдущую cookie с тем же именем в вашем браузере, если только путь или домен не отличаются. Так, для приложения корзины покупок вы, возможно, захотите сохранить счётчик. То есть:
Пример #4 Пример использования setcookie()
if (isset( $_COOKIE [ ‘count’ ])) $count = $_COOKIE [ ‘count’ ] + 1 ;
> else $count = 1 ;
>
setcookie ( ‘count’ , $count , time ()+ 3600 );
setcookie ( «Cart[ $count ]» , $item , time ()+ 3600 );
?>?php
Точки в именах приходящих переменных
Как правило, PHP не меняет передаваемых скрипту имён переменных. Однако следует отметить, что точка не является корректным символом в имени переменной PHP. Поэтому рассмотрим такую запись:
$varname . ext ; /* неверное имя переменной */
?>?php
В данном случае интерпретатор видит переменную $varname , после которой идёт оператор конкатенации, а затем голая строка (то есть, не заключённая в кавычки строка, не соответствующая ни одному из ключевых или зарезервированных слов) ‘ext’. Очевидно, что это не даст ожидаемого результата.
По этой причине важно отметить, что PHP будет автоматически заменять любые точки в именах, приходящих переменных на символы подчёркивания.
Определение типов переменных
Поскольку PHP определяет типы переменных и преобразует их (как правило) по мере необходимости, не всегда очевидно, какой тип имеет данная переменная в любой момент времени. PHP содержит несколько функций, позволяющих определить тип переменной, таких как: gettype() , is_array() , is_float() , is_int() , is_object() и is_string() . Смотрите также раздел Типы.
HTTP является текстовым протоколом, и большинство, если не всё, содержимое, которое приходит в суперглобальные массивы, например, $_POST и $_GET , останется в виде строк. PHP не будет преобразовывать значения в определённый тип. В приведённом ниже примере $_GET[«var1»] будет содержать строку «null», а $_GET[«var2»] — строку «123».
/index.php?var1=null&var2=123
Список изменений
| Версия | Описание |
|---|---|
| 7.2.34, 7.3.23, 7.4.11 | имена входящих cookie больше не декодируются из URL-закодированной строки из соображений безопасности. |
User Contributed Notes 30 notes
15 years ago
The full list of field-name characters that PHP converts to _ (underscore) is the following (not just dot):
chr(32) ( ) (space)
chr(46) (.) (dot)
chr(91) ([) (open square bracket)
chr(128) — chr(159) (various)
PHP irreversibly modifies field names containing these characters in an attempt to maintain compatibility with the deprecated register_globals feature.
22 years ago
Important: Pay attention to the following security concerns when handling user submitted data :
18 years ago
This post is with regards to handling forms that have more than one submit button.
Suppose we have an HTML form with a submit button specified like this:
Normally the ‘value’ attribute of the HTML ‘input’ tag (in this case «Delete») that creates the submit button can be accessed in PHP after post like this:
$_POST [ ‘action_button’ ];
?>
We of course use the ‘name’ of the button as an index into the $_POST array.
This works fine, except when we want to pass more information with the click of this particular button.
Imagine a scenario where you’re dealing with user management in some administrative interface. You are presented with a list of user names queried from a database and wish to add a «Delete» and «Modify» button next to each of the names in the list. Naturally the ‘value’ of our buttons in the HTML form that we want to display will be «Delete» and «Modify» since that’s what we want to appear on the buttons’ faceplates.
Both buttons (Modify and Delete) will be named «action_button» since that’s what we want to index the $_POST array with. In other words, the ‘name’ of the buttons along cannot carry any uniquely identifying information if we want to process them systematically after submit. Since these buttons will exist for every user in the list, we need some further way to distinguish them, so that we know for which user one of the buttons has been pressed.
Using arrays is the way to go. Assuming that we know the unique numerical identifier of each user, such as their primary key from the database, and we DON’T wish to protect that number from the public, we can make the ‘action_button’ into an array and use the user’s unique numerical identifier as a key in this array.
Our HTML code to display the buttons will become:
The 0000000002 is of course the unique numerical identifier for this particular user.
Then when we handle this form in PHP we need to do the following to extract both the ‘value’ of the button («Delete» or «Modify») and the unique numerical identifier of the user we wish to affect (0000000002 in this case). The following will print either «Modify» or «Delete», as well as the unique number of the user:
$submitted_array = array_keys ( $_POST [ ‘action_button’ ]);
echo ( $_POST [ ‘action_button’ ][ $submitted_array [ 0 ]] . » » . $submitted_array [ 0 ]);
?>
$submitted_array[0] carries the 0000000002.
When we index that into the $_POST[‘action_button’], like we did above, we will extract the string that was used as ‘value’ in the HTML code ‘input’ tag that created this button.
If we wish to protect the unique numerical identifier, we must use some other uniquely identifying attribute of each user. Possibly that attribute should be encrypted when output into the form for greater security.
Переменные — место хранения необходимой информации
После прочтения последних двух статей вы знаете, что такое JavaScript, что он может сделать для вас, как использовать его вместе с другими веб-технологиями и какими он обладает функциями высокого уровня. В этой статье мы перейдём к реальным основам, рассмотрим, как работать с большинством базовых блоков JavaScript — Переменными.
| Необходимые навыки: | Базовая компьютерная грамотность, базовое понимание HTML и CSS, понимание того, что такое JavaScript. |
|---|---|
| Цель: | Ознакомиться с основами переменных в JavaScript. |
Инструменты, которые вам нужны
В этой статье вам будет предложено ввести строки кода, чтобы проверить ваше понимание материала. Если вы используете браузер для настольных компьютеров, лучшим примером для ввода кода примера является консоль JavaScript вашего браузера (см. What are browser developer tools для получения дополнительной информации о том, как получить доступ к этому инструменту).
Также мы предоставили простую консоль JavaScript, встроенную ниже в странице, для ввода кода, если вы не используете браузер с консолью JavaScript или консоль на странице окажется для вас более комфортной.
Что такое переменные?
Переменные — это контейнер для таких значений, как числа, используемые в сложении, или строка, которую мы могли бы использовать как часть предложения. Но одна из особенностей переменных — их значение может меняться. Давайте взглянем на простой пример:
button>Нажми на меняbutton>
const button = document.querySelector("button"); button.onclick = function () let name = prompt("Как вас зовут?"); alert("Привет " + name + ", рады видеть вас!"); >;
В примере, по нажатию кнопки выполнится несколько строк кода. Первая строка в функции покажет пользователю окно, где попросит ввести его имя и сохранит значение в переменной. Вторая строка отобразит приветствие с включённым введённым именем, взятым из значения переменной.
Чтобы лучше понять действие переменной здесь, давайте подумаем о том, как мы будем писать этот пример без использования переменной. Это будет выглядеть примерно так:
var name = prompt('Как вас зовут?'); if (name === 'Адам') < alert('Привет, Адам, рады тебя видеть!'); >else if (name === 'Алан') < alert('Привет, Алан, рады тебя видеть!'); >else if (name === 'Белла') < alert('Привет, Белла, рады тебя видеть!'); >else if (name === 'Бьянка') < alert('Привет, Бьянка, рады тебя видеть!'); >else if (name === 'Крис') < alert('Привет, Крис, рады тебя видеть!'); >// . и так далее .
Вам сейчас не обязательно понимать синтаксис, который мы используем (пока!), но вы должны понять идею: если бы у нас не было доступных переменных, нам пришлось бы реализовать гигантский блок кода, который проверял, какое имя было введено, а затем отображал соответствующее сообщение для этого имени. Очевидно, что это неэффективно (код намного больше, даже для четырёх вариантов), и он просто не сработает, так как вы не можете хранить все возможные варианты.
Переменные имеют смысл, и, когда вы узнаете больше о JavaScript, они начнут становиться второй натурой.
Ещё одна особенность переменных заключается в том, что они могут содержать практически все, а не только строки и числа. Переменные могут также содержать сложные данные и даже целые функции. Об этом вы узнаете больше при дальнейшем изучении курса..
Заметьте: мы говорим, что переменные содержат значения. Это важное различие. Переменные не являются самими значениями; они представляют собой контейнеры для значений. Представьте, что они похожи на маленькие картонные коробки, в которых вы можете хранить вещи.
Объявление переменной
Чтобы использовать переменную, вы сначала должны её создать, или, если быть точнее, объявить переменную. Чтобы сделать это, мы вводим ключевое слово var, за которым следует имя, которое вы хотите дать своей переменной:
var myName; var myAge;
Здесь мы создаём две переменные myName и myAge. Попробуйте ввести эти строки сейчас в консоли вашего веб-браузера или в консоли ниже (можно открыть эту консоль в отдельной вкладке или в новом окне). После этого попробуйте создать переменную (или две) с вашими именами.
doctype html> html> head> meta charset="utf-8" /> title>JavaScript consoletitle> style> * box-sizing: border-box; > html background-color: #0c323d; color: #809089; font-family: monospace; > body max-width: 700px; > p margin: 0; width: 1%; padding: 0 1%; font-size: 16px; line-height: 1.5; float: left; > .input p margin-right: 1%; > .output p width: 100%; > .input input width: 96%; float: left; border: none; font-size: 16px; line-height: 1.5; font-family: monospace; padding: 0; background: #0c323d; color: #809089; > div clear: both; > style> head> body>body> script> var geval = eval; function createInput() var inputDiv = document.createElement("div"); var inputPara = document.createElement("p"); var inputForm = document.createElement("input"); inputDiv.setAttribute("class", "input"); inputPara.textContent = ">"; inputDiv.appendChild(inputPara); inputDiv.appendChild(inputForm); document.body.appendChild(inputDiv); if (document.querySelectorAll("div").length > 1) inputForm.focus(); > inputForm.addEventListener("change", executeCode); > function executeCode(e) try var result = geval(e.target.value); > catch (e) var result = "error — " + e.message; > var outputDiv = document.createElement("div"); var outputPara = document.createElement("p"); outputDiv.setAttribute("class", "output"); outputPara.textContent = "Result: " + result; outputDiv.appendChild(outputPara); document.body.appendChild(outputDiv); e.target.disabled = true; e.target.parentNode.style.opacity = "0.5"; createInput(); > createInput(); script> html>
Примечание: в JavaScript все инструкции кода должны заканчиваться точкой с запятой (;) — ваш код может работать правильно для отдельных строк, но, вероятно, не будет, когда вы пишете несколько строк кода вместе. Попытайтесь превратить написание точки с запятой в привычку.
Теперь проверим, существуют ли эти значения в среде выполнения. Для этого введём только имя переменной.
; myAge;
В настоящее время они не содержат значения, это пустые контейнеры. В этом случае, когда вы вводите имена переменных, вы должны получить значение undefined . Если они не существуют, вы получите сообщение об ошибке — попробуйте сейчас ввести в консоли имя переменной ниже:
Примечание: Не путайте переменную, которая существует, но не имеет значения, с переменной, которая вообще не существует — это разные вещи.
Присвоение значения переменной
Как только переменная объявлена, ей можно присвоить значение. Для этого пишется имя переменной, затем следует знак равенства ( = ), а за ним значение, которое вы хотите присвоить. Например:
= "Chris"; myAge = 37;
Попробуйте вернуться в консоль и ввести эти строки. Вы должны увидеть значение, которое вы назначили переменной, возвращаемой в консоли. Чтобы посмотреть значения переменных, нужно набрать их имя в консоли:
; myAge;
Вы можете объявить переменную и задать ей значение одновременно:
var myName = "Chris";
Скорее всего, так вы будете писать большую часть времени, так как запись и выполнения кода с одно строки происходит быстрее, чем выполнение двух действий на двух отдельных строках.
Примечание: Если вы пишете многострочную программу JavaScript, которая объявляет и инициализирует (задаёт значение) переменную, вы можете объявить её после её инициализации, и она всё равно будет работать. Это связано с тем, что объявления переменных обычно выполняются первыми, прежде чем остальная часть кода будет выполнена. Это называется hoisting — прочитайте var hoisting для более подробной информации по этому вопросу.
Обновление переменной
Когда переменной присваивается значение, вы можете изменить (обновить) это значение, просто указав другое значение. Попробуйте ввести следующие строки в консоль:
= "Bob"; myAge = 40;
Правила именования переменных
Вы можете назвать переменную как угодно, но есть ограничения. Как правило, вы должны придерживаться только латинских символов (0-9, a-z, A-Z) и символа подчёркивания.
- Не рекомендуется использование других символов, потому что они могут вызывать ошибки или быть непонятными для международной аудитории.
- Не используйте символы подчёркивания в начале имён переменных — это используется в некоторых конструкциях JavaScript для обозначения конкретных вещей.
- Не используйте числа в начале переменных. Это недопустимо и приведёт к ошибке.
- Общепринято придерживаться так называемый «lower camel case», где вы склеиваете несколько слов, используя строчные буквы для всего первого слова, а затем заглавные буквы последующих слов. Мы использовали это для наших имён переменных в этой статье.
- Делайте имена переменных такими, чтобы было интуитивно понятно, какие данные они содержат. Не используйте только отдельные буквы / цифры или большие длинные фразы.
- Переменные чувствительны к регистру, так что myage и myAge — разные переменные.
- И последнее — вам также нужно избегать использования зарезервированных слов JavaScript в качестве имён переменных — под этим мы подразумеваем слова, которые составляют фактический синтаксис JavaScript! Таким образом, вы не можете использовать слова типа var , function , let , и for для имён переменных. Браузеры распознают их как разные элементы кода, и поэтому возникают ошибки.
Примечание: По ссылке можно найти довольно полный список зарезервированных ключевых слов: Lexical grammar — keywords.
Примеры хороших имён переменных:
age myAge init initialColor finalOutputValue audio1 audio2
Примеры плохих имён переменных:
1 a _12 myage MYAGE var Document skjfndskjfnbdskjfb thisisareallylongstupidvariablenameman
Примеры имён переменных, которые вызовут ошибки:
var Document
Попытайтесь создать ещё несколько переменных прямо сейчас, используя знания, изложенные выше.
Типы переменных
Есть несколько различных типов данных, которые мы можем хранить в переменных. В этом разделе мы кратко опишем их, а затем в будущих статьях вы узнаете о них более подробно.
Числа (Numbers)
Вы можете хранить числа в переменных (целые числа, такие как 30, или десятичные числа, такие как 2.456, также называемые числами с плавающей точкой или с плавающей запятой). Вам не нужно объявлять типы переменных в JavaScript, в отличие от некоторых других языков программирования Если давать переменной значение числа,кавычки не используются:
var myAge = 17;
Строки (‘Strings’)
Строки — это фрагменты текста. Когда вы даёте переменной значение строки, вам нужно обернуть её в одиночные или двойные кавычки, в противном случае JavaScript попытается проиндексировать её как другое имя переменной.
var dolphinGoodbye = "So long and thanks for all the fish";
Логические (Booleans)
Booleans — истинные / ложные значения — они могут иметь два значения: true или false. Они обычно используются для проверки состояния, после чего код запускается соответствующим образом. Вот простой пример:
var iAmAlive = true;
В действительности вы чаще будете использовать этот тип переменных так:
var test = 6 3;
Массивы (Arrays)
Массив — это один объект, который содержит несколько значений, заключённых в квадратные скобки и разделённых запятыми. Попробуйте ввести следующие строки в консоль:
var myNameArray = ["Chris", "Bob", "Jim"]; var myNumberArray = [10, 15, 40];
Как только эти массивы определены, можно получить доступ к каждому значению по их местоположению в массиве. Наберите следующие строки:
[0]; // should return 'Chris' myNumberArray[2]; // should return 40
Квадратные скобки указывают значение индекса, соответствующее позиции возвращаемого значения. Возможно, вы заметили, что массивы в JavaScript индексируются с нулевой отметкой: первый элемент имеет индекс 0.
В следующей статье вы узнаете больше о массивах.
Объекты (Objects)
В программировании объект представляет собой структуру кода, который моделирует объект реальной жизни. У вас может быть простой объект, представляющий автостоянку, и содержит информацию о её ширине и длине; или вы можете иметь объект, который представляет человека, и содержит данные о его имени, росте, весе, на каком языке он говорит, как сказать ему привет и многое другое.
Попробуйте ввести следующую строку в консоль:
var dog = name: "Spot", breed: "Dalmatian" >;
Чтобы получить информацию, хранящуюся в объекте, вы можете использовать следующий синтаксис:
.name;
Мы больше не будем рассматривать объекты в данном курсе — вы можете больше узнать о них в будущем модуле.
Динамическая типизация
JavaScript — это «динамически типизируемый язык», что означает, что в отличие от некоторых других языков вам не нужно указывать, какой тип данных будет содержать переменная (например, числа, строки, массивы и т. д.).
Например, если вы объявите переменную и присвоите ей значение, заключённое в кавычки, браузер будет обрабатывать переменную как строку:
var myString = "Привет";
Он всё равно будет строкой, даже если он содержит числа, поэтому будьте осторожны:
var myNumber = "500"; // упс, это все ещё строка (string) typeof myNumber; myNumber = 500; // так-то лучше, теперь это число (number) typeof myNumber;
Попробуйте ввести четыре строки выше в консоль одну за другой и посмотреть результаты. Вы заметите, что мы используем специальную функцию typeof() — она возвращает тип данных переменной, которую вы передаёте в неё. В первый раз, когда она вызывается, она должа возвращать строку, так как переменная myNumber содержит строку ‘500’ . Посмотрите, что она вернёт во второй раз, когда вы её вызовите.
Подведение итогов
К настоящему времени вы должны знать достаточно о переменных JavaScript и о том, как их создавать. В следующей статье мы остановимся на числах более подробно, рассмотрев, как сделать базовую математику в JavaScript.
Found a content problem with this page?
- Edit the page on GitHub.
- Report the content issue.
- View the source on GitHub.
This page was last modified on 3 авг. 2023 г. by MDN contributors.
Your blueprint for a better internet.
