diff options
Diffstat (limited to 'files/ru/glossary/primitive/index.html')
-rw-r--r-- | files/ru/glossary/primitive/index.html | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/files/ru/glossary/primitive/index.html b/files/ru/glossary/primitive/index.html new file mode 100644 index 0000000000..cdeff2610a --- /dev/null +++ b/files/ru/glossary/primitive/index.html @@ -0,0 +1,105 @@ +--- +title: Primitive +slug: Словарь/Primitive +tags: + - CodingScripting + - Glossary + - JavaScript +translation_of: Glossary/Primitive +--- +<p><strong>Примитив</strong> (значение примитивного типа, примитивный тип данных) это данные, которые не являются {{glossary("object", "объектом")}} и не имеют {{glossary("method","методов")}}. В {{Glossary("JavaScript")}} 7 простых типов данных: {{Glossary("string")}}, {{Glossary("number")}}, {{Glossary("boolean")}}, {{Glossary("null")}}, {{Glossary("undefined")}}, {{Glossary("symbol")}} (новое в {{Glossary("ECMAScript")}} 2015), {{Glossary("bigint")}}.</p> + +<p>Чаще всего значение примитивного типа представлено в низкоуровневой реализации языка.</p> + +<p>Все<strong> </strong>примитивы <strong>неизменяемы (immutable)</strong>, то есть они не могут быть изменены. <span id="result_box" lang="ru"><span>Важно не путать сам примитив с переменной, которой присвоено значение примитивного типа.</span> <span>Переменной может быть переприсвоено новое значение, но существующее значение примитивного типа не может быть изменено подобно объектам, массивам и функциям.</span></span></p> + +<h2 id="Пример">Пример</h2> + +<p><span id="result_box" lang="ru"><span>Этот пример поможет понять, что значения примитивных типов неизменяемы </span></span><strong>(immutable)</strong><span lang="ru"><span>.</span></span></p> + +<h3 id="JavaScript">JavaScript</h3> + +<pre class="brush: js">// Using a string method doesn't mutate the string +var bar = "baz"; +console.log(bar); // baz +bar.toUpperCase(); +console.log(bar); // baz + +// Using an array method mutates the array +var foo = []; +console.log(foo); // [] +foo.push("plugh"); +console.log(foo); // ["plugh"] + +// Assignment gives the primitive a new (not a mutated) value +bar = bar.toUpperCase(); // BAZ +</pre> + +<p><span id="result_box" lang="ru"><span>Примитив может быть заменен, но он не может быть напрямую изменен.</span></span></p> + +<h2 id="Другой_пример_Step-by-step">Другой пример [ Step-by-step ]</h2> + +<p><span id="result_box" lang="ru"><span>Следующий пример поможет разобраться как JavaScript </span></span><span lang="ru"><span>работает с примитивами.</span></span></p> + +<h3 class="highlight-spanned" id="JavaScript_2"><span class="highlight-span">JavaScript</span></h3> + +<pre class="brush: js line-numbers language-js">// The Primitive +let foo = 5; + +// Defining a function that should change the Primitive value +function addTwo(num) { + num += 2; +} +// Another function trying to do the same thing +function addTwo_v2(foo) { + foo += 2; +} + +// Calling our first function while passing our Primitive as an argument +addTwo(foo); +// Getting the current Primitive value +console.log(foo); // 5 + +// Trying again with our second function... +addTwo_v2(foo); +console.log(foo); // 5 +</pre> + +<p><span id="result_box" lang="ru"><span>Вы ожидали, что будет 7 вместо 5?</span> <span>Если так, тогда прочитайте, как работает этот код:</span></span></p> + +<ul> + <li>При вызове обеих функций <code>addTwo</code> <code>и addTwo_v2</code>, JavaScript ищет <span class="short_text" id="result_box" lang="ru"><span>значение для идентификатора</span></span> <code>foo</code>. JavaScript <span id="result_box" lang="ru"><span>правильно определяет нашу переменную, созданную с помощью первого оператора</span></span></li> + <li><span id="result_box" lang="ru"><span>После этого JavaScript передает найденный аргумент в функцию в качестве параметра</span></span></li> + <li>Перед выполнением операторов в теле функции, <strong>JavaScript берет исходный переданный аргумент </strong>(который является примитивом) и создает его локальную копию. <span id="result_box" lang="ru"><span>Эти копии, существующие только внутри областей функций, доступны через идентификаторы, указанные в определениях функций</span></span> (<code>num</code> для <code>addTwo</code>, <font face="consolas, Liberation Mono, courier, monospace"><span style="background-color: rgba(220, 220, 220, 0.5);">foo</span></font> для <code>addTwo_v2</code>)</li> + <li><span class="short_text" id="result_box" lang="ru"><span>Затем выполняются операторы функций</span></span>: + <ul> + <li>В первой функции был создан локальный аргумент <code>num</code>. <span id="result_box" lang="ru"><span>Мы увеличиваем его значение на 2</span></span> (а не значение исходной переменной <code>foo</code>).</li> + <li>Во второй функции был создан локальный аргумент<code> foo</code>. Мы увеличиваем его значение на 2 (а не значение исходной (внешней) переменной <code>foo</code>). <span id="result_box" lang="ru"><span>Кроме того, в этой ситуации, внешняя переменная</span></span> <code>foo</code> является недоступной <strong>никаким</strong> способом. Это связано с лексическими областями JavaScript и, как следствие, с затенением переменных. Локальная переменная <code>foo</code> скрывает внешнюю переменную <code>foo</code>. Чтобы получить больше информации, смотри <a href="/en-US/docs/Web/JavaScript/Closures">Closures</a>.</li> + </ul> + </li> + <li>Таким образом, никакие изменения внутри наших функций <strong>не будут</strong> влиять на ИСХОДНУЮ <code>foo</code> вообще, так как мы работаем с ее <strong>копиями</strong></li> +</ul> + +<p><span id="result_box" lang="ru"><span>Вот почему примитивы неизменяемы </span></span><strong>(immutable)</strong><span lang="ru"><span>.</span> <span>Потому что мы не работаем над ними напрямую. Мы создаем копию и продолжаем работать с ней, не касаясь исходных значений.</span></span></p> + +<h2 id="Обертки_примитивных_типов_в_JavaScript">Обертки примитивных типов в JavaScript</h2> + +<p>За исключением <code>null</code> и <code>undefined</code>, все примитивные значения имеют объектный аналог, который оборачивает значение примитивного типа:</p> + +<ul> + <li>{{jsxref("String")}} для string примитива.</li> + <li>{{jsxref("Number")}} для number примитива.</li> + <li>{{jsxref("Boolean")}} для Boolean примитива.</li> + <li>{{jsxref("Symbol")}} для Symbol примитива.</li> +</ul> + +<p>Метод <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/valueOf"><code>valueOf()</code></a> типа обертки возвращает значение примитивного типа.</p> + +<h2 id="См._также">См. также</h2> + +<h3 id="Общие_сведения">Общие сведения</h3> + +<ul> + <li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures">Введение в типы данных JavaScript</a></li> + <li> <a href="https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B8%D0%BC%D0%B8%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%B9_%D1%82%D0%B8%D0%BF">Примитивный тип</a> на Wikipedia</li> +</ul> |