[Рекомендации по теме: видеоуроки по JavaScript, веб-интерфейс]
В этой статье будет рассмотрена чрезвычайно интересная концепция, а именно методы атрибутов базовых типов. Как насчет этого, ты немного запутался? Позвольте мне рассказать вам медленно ~
В других объектно-ориентированных языках программирования, таких как Java
и C++
, атрибуты представляют собой уникальную концепцию объектов, а базовый тип — это базовый тип. Не существует понятия методов атрибутов.
Да, это еще одна плохая идея JavaScript
. Его движок позволяет нам использовать методы свойств для манипулирования базовыми типами данных, например объектами.
Прежде чем объяснить эту странную особенность, мы должны сначала уточнить, в чем разница между базовыми типами и объектными типами?
JavaScript
;JavaScript
существует 7
основных типов, а именно: String
, Number
, Boolean
, BigInt
, Symbol
, null
и undefined
.{ }
{ }
Создание и хранение нескольких значений;JavaScript
также есть другие типы объектов, например функции;ключевой особенностью внедрения объектов является инкапсуляция , которая позволяет хранить все виды беспорядочных данных и методов в одном. object , что снижает сложность использования.
Например:
пусть пользователь = { имя: «Сяомин», привет() { console.log(`Привет, я ${this.name}`); }}user.hello();
Мы инкапсулируем атрибуты и методы user
объекта в объект, чтобы его было очень просто использовать. Нам нужно использовать только obj.attr
для вызова методов или атрибутов.
Однако это влечет за собой дополнительные накладные расходы (у объектно-ориентированного языка есть дополнительные накладные расходы), и именно здесь объектно-ориентированный язык C++
работает медленнее, чем C
в качестве объектов. Есть две проблемы, которые трудно решить при использовании базовых типов в качестве объектов:
"abc".toUpperCase()
;JavaScript
решает вышеуказанные проблемы очень «простым» способом:
String
, Number
, Boolean
и Symbol
,смысл приведенных выше правил заключается в том, что базовый тип по-прежнему остается базовым типом, но что, если мы хотим получить доступ к методам и свойствам базового типа, мы обернем базовый тип в объект (оболочку объекта), а затем уничтожьте его после завершения доступа. Честно говоря, это звучит немного смешно.
Пример
let name = "Trump";console.log(name.toUpperCase());//Методы доступа к базовым типам.
Результаты выполнения приведенного выше кода следующие:
Вроде бы большой проблемы нет, но произошло много всего, и нам нужно знать следующие моменты:
name
— это базовый строковый тип, и в нем нет ничего особенногоname
— файлу, содержащемуtoUpperCase
;toUpperCase
возвращает новую строку;значение самой переменной не изменяется следующим образом:
Хотя решение полно компромиссов (плохих идей), результат по-прежнему хорош, и достигнуты следующие достижения:
хотя теоретически это верно, на самом деле движок JavaScript
сильно оптимизирован для этого процесса, и я подозреваю, что он вообще не создает дополнительных объектов. Он просто устно заявил, что соблюдает правила, как будто у него действительно был временный объект.
В этой статье лишь кратко представлена концепция методов базового типа и не объясняются различные методы. По мере углубления руководства постепенно будет задействовано большое количество методов. Здесь мы лишь кратко перечислим некоторые часто используемые методы и свойства базовых типов.
Различные базовые типы имеют разные методы атрибутов, которые перечислены в следующих категориях:
Атрибут длиныlength
возвращает длину строки
console.log("abc".length).
Результаты приведенного выше кода следующие:
индекс
indexOf(ch)
символа ch
в строке
console.log("abc".indexOf('b'));console.log("abc".indexOf('d'));
Результаты выполнения кода следующие:
Если символ существует в строке, возвращается индекс (отсчитываемый от 0
), если он не найден, возвращается -1
.
метод concat(str)
, соединить две строки
let str1 = "hello ";let str2 = "world!";console.log(str1.concat(str2));console.log(str1);console.log(str2 );
Результаты выполнения кода следующие:
replace(str1,str2)
, используйте str2
для замены str1
let str = "javascript";console.log(str.replace('java','996'));console.log(str);
Результаты выполнения кода: следующее:
toFixed(num)
, округляет десятичные числа до указанной точности
console.log(9.3333333.toFixed(3)); console.log(9.3333333.toFixed(0));
Результаты выполнения кода следующие:
toString()
, преобразовать числа в строки
3.14.toString();//Преобразовать в '3.14'console.log((8).toString(2));//Преобразовать в двоичный '1000'console.log((( 9).toString(2));//Преобразовать в двоичную строку '1001'console.log((996).toString(16));//Преобразовать в шестнадцатеричную строку '3e4'Результаты
выполнения кода следующие:
toExponential()
, преобразованный в метод экспоненциального счета
console.log(3.1415926.toExponential()); console.log(3.1415926.toExponential(2)); console.log(3.1415926.toExponential(3));
Результаты выполнения кода: следующее:
Дополнительные методы будут показаны в последующих главах, поэтому я не буду здесь вдаваться в подробности.
Как и Java
, JavaScript
может явно создавать «обертки объектов» для базовых типов с помощью оператора new
. Этот подход крайне не рекомендуется . Он упоминается здесь только для понимания целостности.
При таком подходе возникают проблемы, например:
let num = new Number(0);console.log(typeof num);console.log(typeof 0);
Результаты выполнения кода следующие:
Или в решении возникнет путаница:
let Zero = new Number(0);if (zero) { // ноль — это истина, потому что это объект console.log('true');}
Результат выполнения кода такой: следует:
При этом не забывайте, что функция String/Number/Boolean
без new
(ключевого слова) может преобразовать значение в соответствующий тип: в строку, число или логическое значение (исходный тип).
Например:
console.log(typeof Number('123'));
Примечание.
Два типа
null
иundefined
не имеют методов.
базовые типы, кроме null
и undefined
предоставляют множество полезных методов,
хотя JavaScript
их использует. скомпрометированный метод реализации, но достиг относительно удовлетворительных результатов, реализуя атрибуты и вызовы методов базовых типов с меньшими затратами
[Связанные рекомендации: видеоуроки по JavaScript, веб-интерфейс]
Выше показано, как JavaScript реализует то же самое; атрибуты и объекты как объекты. Для получения подробной информации о методе, пожалуйста, обратите внимание на другие соответствующие статьи в сети исходного кода для получения дополнительной информации!