JavaScript Методы примитивов

В JavaScript можно работать с примитивами (числами, строками и др.), как если бы они были объектами.

Но, разумеется, есть заметные различия между объектами и примитивами.

Поэтому, примитив - это значение примитивного типа. Существует семь типов примитивов, среди которых: число, bigint, символ, строка, логическое значение, null и undefined. Объект может хранить несколько значений в виде свойств. Вы можете создать объект, используя {}. Например:

{
  name: "Chevrolet",
  model: "Camaro",
  price: 40000
}

В JavaScript существуют и другие виды объектов. Например, функции также считаются объектами.

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

Например:

Javascript object's function properties
let site = { name: "W3Docs", welcome: function () { console.log("Welcome to W3Docs!"); } }; site.welcome(); // Welcome to W3Docs!

Существует множество встроенных объектов. Например, те, которые работают с ошибками, датами, HTML элементами и др. Они включают различные методы и свойства.

Но, учтите, что объектам требуются дополнительные ресурсы для поддержки внутренней механики.

Примитив как объект

Ниже описан парадокс JavaScript:

  • Хотелось бы делать многое с примитивами, такими как строки и числа. Доступ к ним через методы был бы отличным решением.
  • Примитивы должны быть легкими и быстрыми.

И вот решение, которое может показаться несколько странным:

  • Примитивы остаются примитивами. Одно значение, как и хотелось.
  • В языке у вас есть доступ к свойствам и методам строк, символов, логических значений и чисел.
  • Чтобы это работало, генерируется специальный «объект-обертка», который предоставляет дополнительную функциональность, а затем уничтожается.

Для каждого типа примитива существует свой собственный «объект-обертка» под названием: Number, Boolean, String, Symbol. Они предоставляют различные наборы методов. Например, есть метод строки str.toUpperCase(), возвращающий прописную str.

Это работает так:

Javascript string toUpperCase method
let str = "Welcome to W3Docs"; console.log(str.toUpperCase()); // WELCOME TO W3DOCS

Теперь давайте посмотрим, что происходит в str.toUpperCase():

  • str - это примитив. В момент доступа к его свойству создается уникальный объект. Этот объект знает значение строки и имеет полезные методы, такие как toUpperCase().
  • Этот метод способен работать и возвращать совершенно новую строку (это показано с помощью console.log).
  • Специальный объект уничтожается, и примитив str остается в одиночестве.

Мы можем предположить что примитивы предоставляют методы, но остаются легкими.

Важно отметить, что JavaScript значительно улучшает этот процесс. Более того, создание дополнительного объекта может быть пропущено. Тем не менее, нужно придерживаться спецификации, которая ведет себя так, как будто генерирует один.

У числа есть свои методы. Давайте посмотрим на этот пример:

Javascript numbers method
let num = 1.23456; console.log(num.toFixed(3)); // 1.235

Здесь, toFixed(n) округляет число до определенной точности.

Например:

Javascript numbers methods
let num = 1.23456; console.log(num.toFixed(2)); // 1.23

Обратите внимание, что вы можете использовать конструкторы String/Number/Boolean только внутренне.

В некоторых других языках, например, в Java, предоставляются возможности создавать «объекты-обертки» для примитивов с помощью следующего синтаксиса:

new Number(1);
or
new Boolean(false);

Теоретически, это возможно и в JavaScript, но мы не рекомендуем вам это делать. Это может привести к нежелательным результатам. Например:

Javascript numbers methods
console.log(typeof 0); // "number" console.log(typeof new Number(0)); // "object"

В if, объекты всегда истинные. Здесь предупреждение покажет следующее:

Javascript numbers methods
let zero = new Number(0); if (zero) { // zero is true, because it's an object console.log("In this case, zero is truthy!"); }

Еще одна полезная вещь - использование тех же функций String/Number/Booleanбез new. С их помощью значение преобразуется в строку, число и логическое значение.

Вот пример:

Javascript numbers methods
let num = Number("12"); // convert a string to number console.log(typeof num);

Резюме

При примитиве есть множество полезных методов (за исключением null и undefined). Эти методы функционируют через временные объекты. Движки JavaScript правильно настроены для ускорения этого внутренне. Поэтому вызов их не является затратным.

Время Викторины: Проверьте Свои Навыки!

отовы проверить свои знания? Погрузитесь в наши интерактивные викторины для более глубокого понимания и веселого способа закрепить знания.

Считаете ли это полезным?