Методы и свойства по работе со строками — КиберПедия 

Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

Методы и свойства по работе со строками

2019-05-27 161
Методы и свойства по работе со строками 0.00 из 5.00 0 оценок
Заказать работу

Послание № 4

Обертки простых типов

JavaScript позволяет работать со значениями примитивных типов как с объектами, в том смысле, что язык позволяет обращаться к их свойствам и методам.

(1.23).toFixed(1); //"1.2"

"text".toUpperCase(); //"TEXT"

true.toString(); //"true"

При этом, конечно, значения примитивных типов объектами не являются.

Для организации доступа к «свойствам» значений примитивных типов JavaScript, при необходимости, создаёт объекты-обёртки, которые, после того, как они оказываются ненужными, уничтожаются. Процесс создания и уничтожения объектов-обёрток оптимизируется JS-движком.

Объектные обёртки есть у значений числового, строкового и логического типов. Объекты соответствующих типов представлены функциями-конструкторами Number, String, и Boolean.

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

Методы по работе с числами

ToFixed()

JavaScript метод toFixed() форматирует числовое значение в строковое, сохраняя при этом указанное количество цифр после запятой.

Обратите Ваше внимание на то, что метод toFixed() в том случае, если указанное число десятичных знаков превышает фактическое число, добавляет для достижения требуемой десятичной длины нулевые значения.

var num = 12345.6789; // инициализируем числовую переменную

num.toFixed(); // возвращаемое значение "12346"

num.toFixed(3); // возвращаемое значение "12345.679"

num.toFixed(2); // возвращаемое значение "12345.68"

num.toFixed(10); // возвращаемое значение "12345.6789000000"

num.toFixed(-1); // RangeError

num.toFixed(101); // RangeError

ToPrecision()

JavaScript метод toPrecision() возвращает строку определенной длины, представляющую число (объект Number) в записи с фиксированной запятой, или в экспоненциальной форме записи, округленное до точных значащих цифр.

var num = 12345.6789; // инициализируем числовую переменную

num.toPrecision(); // возвращаемое значение "12345.6789"

num.toPrecision(3); // возвращаемое значение "1.23e+4"

num.toPrecision(10); // возвращаемое значение "12345.67890"

num.toPrecision(9); // возвращаемое значение "12345.6789"

num.toPrecision(7); // возвращаемое значение "12345.68"

num.toPrecision(5); // возвращаемое значение "12346"

num.toPrecision(-1); // RangeError

num.toPrecision(101); // RangeError

Методы и свойства по работе со строками

Длина length

Одно из самых частых действий со строкой – это получение ее длины:

var str = "Man"; // 3 символа.

alert(str.length); // 3

Доступ к символам

Чтобы получить символ, используйте вызов charAt(позиция).

Первый символ имеет позицию 0:

var str = "jQuery";

alert(str.charAt(0)); // "j"

Также для доступа к символу можно использовать квадратные скобки:

var str = "Я - современный браузер!";

alert(str[0]); // "Я"

Разница между этим способом и charAt заключается в том, что если символа нет – charAt выдает пустую строку, а скобки – undefined:

alert("".charAt(0)); // пустая строка

alert("" [0]); // undefined

Вообще же метод charAt существует по историческим причинам, ведь квадратные скобки – проще и короче.

Обратите внимание, str.length – это свойство строки, а str.charAt(pos) – метод, т.е. функция.

Важно!

Обращение к методу всегда идет со скобками, а к свойству – без скобок.

Изменения строк

Содержимое строки в JavaScript нельзя изменять. Нельзя взять символ посередине и заменить его. Как только строка создана – она такая навсегда.

Можно лишь создать целиком новую строку и присвоить в переменную вместо старой, например:

var str = "строка";

str = str[3] + str[4] + str[5];

alert(str); // ока

Смена регистра

Методы toLowerCase() и toUpperCase() меняют регистр строки на нижний/верхний:

alert("Интерфейс".toUpperCase()); // ИНТЕРФЕЙС

Пример ниже получает первый символ и приводит его к нижнему регистру:

alert("Интерфейс" [0].toLowerCase()); // 'и'

Поиск подстроки

Для поиска подстроки есть метод indexOf(подстрока[, начальная_позиция]).

Он возвращает позицию, на которой находится подстрока или -1, если ничего не найдено. Например:

var str = "Widget with id";

alert(str.indexOf("Widget")); // 0, т.к. "Widget" найден прямо в начале str

alert(str.indexOf("id")); // 1, т.к. "id" найден, начиная с позиции 1

alert(str.indexOf("widget")); // -1, не найдено, так как поиск учитывает регистр

Необязательный второй аргумент позволяет искать, начиная с указанной позиции. Например, первый раз "id" появляется на позиции 1. Чтобы найти его следующее появление – запустим поиск с позиции 2:

var str = "Widget with id";

alert(str.indexOf("id", 2)) // 12, поиск начат с позиции 2

Также существует аналогичный метод lastIndexOf(), который ищет не с начала, а с конца строки.

Substr(start,number)

Первый аргумент имеет такой же смысл, как и в substring, а второй содержит не конечную позицию, а количество символов.

var str = "stringify";

str = str.substr(2,4); // ring, со 2-й позиции 4 символа

alert(str)

Если второго аргумента нет – подразумевается «до конца строки».

slice(start, end)

Возвращает часть строки от позиции start до, но не включая, позиции end. Смысл параметров – такой же как в substring.

Отрицательные аргументы

Различие между substring и slice – в том, как они работают с отрицательными и выходящими за границу строки аргументами:

Substring

Отрицательные аргументы интерпретируются как равные нулю. Слишком большие значения усекаются до длины строки:

alert("testme".substring(-2)); // "testme", -2 становится 0

Кроме того, если start > end, то аргументы меняются местами, т.е. возвращается участок строки между start и end:

alert("testme".substring(4, -1)); // "test"

// -1 становится 0 -> получили substring(4, 0)

// 4 > 0, так что аргументы меняются местами -> substring(0, 4) = "test"

Slice

Отрицательные значения отсчитываются от конца строки:

alert("testme".slice(-2)); // "me", от 2 позиции с конца

alert("testme".slice(1, -1)); // "estm", от 1 позиции до первой с конца.

Это гораздо более удобно, чем странная логика substring.

Отрицательное значение первого параметра поддерживается в substr во всех браузерах, кроме IE8-.

Если выбирать из этих трёх методов один, для использования в большинстве ситуаций – то это будет slice: он и отрицательные аргументы поддерживает и работает наиболее очевидно.

Специальные символы

Строки могут содержать специальные символы, которые позволяют форматировать текст прямо из кода.

Самый часто используемый из таких символов – это «перевод строки».

Он обозначается как \n, например:

alert('Привет\nМир'); // выведет "Мир" на новой строке

Есть и более редкие символы, вот их список:

Специальные символы

Символ Описание \n New line \t Tab \uNNNN Символ в кодировке Юникод с шестнадцатеричным кодом `NNNN`. Например, `\u00A9` -- юникодное представление символа копирайт ©

Сравнение строк

Строки сравниваются побуквенно:

alert('Б' > 'А'); // true

Осторожно, Unicode!

Аналогом «алфавита» во внутреннем представлении строк служит кодировка, у каждого символа – свой номер (код). JavaScript использует кодировку Unicode.

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

В кодировке Unicode обычно код у строчной буквы больше, чем у прописной.

Поэтому регистр имеет значение:

alert('а' > 'Я'); // true, строчные буквы больше прописных

Для корректного сравнения символы должны быть в одинаковом регистре.

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

Иными словами, больше – та строка, которая в телефонной книге была бы на большей странице.

Например:

Если первая буква первой строки больше – значит первая строка больше, независимо от остальных символов:

alert('Банан' > 'Анна');

Если одинаковы – сравнение идёт дальше. Здесь оно дойдёт до третьей буквы:

alert('Вася' > 'Ваня'); // true, т.к. 'с' > 'н'

При этом любая буква больше отсутствия буквы:

alert('Привет' > 'Прив'); // true, так как 'е' больше чем "ничего".

Такое сравнение называется лексикографическим.

Важно!

Обычно Важно!

мы получаем значения от посетителя в виде строк. Например, prompt возвращает строку, которую ввел посетитель.

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

alert("2" > "14"); // true, неверно, ведь 2 не больше 14

В примере выше 2 оказалось больше 14, потому что строки сравниваются посимвольно, а первый символ '2'больше '1'.

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

alert(+"2" > +"14"); // false, теперь правильно

Сравнение разных типов

При сравнении значений разных типов, используется числовое преобразование. Оно применяется к обоим значениям.

Например:

alert('2' > 1); // true, сравнивается как 2 > 1

alert('01' == 1); // true, сравнивается как 1 == 1

alert(false == 0); // true, false становится числом 0

alert(true == 1); // true, так как true становится числом 1.

Строгое равенство

В обычном операторе == есть «проблема» – он не может отличить 0 от false:

alert(0 == false); // true

Та же ситуация с пустой строкой:

alert('' == false); // true

Это естественное следствие того, что операнды разных типов преобразовались к числу. Пустая строка, как и false, при преобразовании к числу дают 0.

Для проверки равенства без преобразования типов используются операторы строгого равенства === (тройное равно) и!==.

Если тип разный, то они всегда возвращают false:

alert(0 === false); // false, т.к. типы различны

Строгое сравнение предпочтительно, если мы хотим быть уверены, что «сюрпризов» не будет.

Несравнимый undefined

Значение undefined вообще нельзя сравнивать:

alert(undefined > 0); // false (1)

alert(undefined < 0); // false (2)

alert(undefined == 0); // false (3)

Сравнения (1) и (2) дают false потому, что undefined при преобразовании к числу даёт NaN. А значение NaNпо стандарту устроено так, что сравнения ==, <, >, <=, >= и даже === с ним возвращают false.

Проверка равенства (3) даёт false, потому что в стандарте явно прописано, что undefined равно лишь null или себе и ничему другому.

Вывод: любые сравнения с undefined/null, кроме точного ===, следует делать с осторожностью.

Желательно не использовать сравнения >= > < <= с ними, во избежание ошибок в коде.

Послание № 4

Обертки простых типов

JavaScript позволяет работать со значениями примитивных типов как с объектами, в том смысле, что язык позволяет обращаться к их свойствам и методам.

(1.23).toFixed(1); //"1.2"

"text".toUpperCase(); //"TEXT"

true.toString(); //"true"

При этом, конечно, значения примитивных типов объектами не являются.

Для организации доступа к «свойствам» значений примитивных типов JavaScript, при необходимости, создаёт объекты-обёртки, которые, после того, как они оказываются ненужными, уничтожаются. Процесс создания и уничтожения объектов-обёрток оптимизируется JS-движком.

Объектные обёртки есть у значений числового, строкового и логического типов. Объекты соответствующих типов представлены функциями-конструкторами Number, String, и Boolean.

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

Методы по работе с числами

ToFixed()

JavaScript метод toFixed() форматирует числовое значение в строковое, сохраняя при этом указанное количество цифр после запятой.

Обратите Ваше внимание на то, что метод toFixed() в том случае, если указанное число десятичных знаков превышает фактическое число, добавляет для достижения требуемой десятичной длины нулевые значения.

var num = 12345.6789; // инициализируем числовую переменную

num.toFixed(); // возвращаемое значение "12346"

num.toFixed(3); // возвращаемое значение "12345.679"

num.toFixed(2); // возвращаемое значение "12345.68"

num.toFixed(10); // возвращаемое значение "12345.6789000000"

num.toFixed(-1); // RangeError

num.toFixed(101); // RangeError

ToPrecision()

JavaScript метод toPrecision() возвращает строку определенной длины, представляющую число (объект Number) в записи с фиксированной запятой, или в экспоненциальной форме записи, округленное до точных значащих цифр.

var num = 12345.6789; // инициализируем числовую переменную

num.toPrecision(); // возвращаемое значение "12345.6789"

num.toPrecision(3); // возвращаемое значение "1.23e+4"

num.toPrecision(10); // возвращаемое значение "12345.67890"

num.toPrecision(9); // возвращаемое значение "12345.6789"

num.toPrecision(7); // возвращаемое значение "12345.68"

num.toPrecision(5); // возвращаемое значение "12346"

num.toPrecision(-1); // RangeError

num.toPrecision(101); // RangeError

Методы и свойства по работе со строками

Длина length

Одно из самых частых действий со строкой – это получение ее длины:

var str = "Man"; // 3 символа.

alert(str.length); // 3

Доступ к символам

Чтобы получить символ, используйте вызов charAt(позиция).

Первый символ имеет позицию 0:

var str = "jQuery";

alert(str.charAt(0)); // "j"

Также для доступа к символу можно использовать квадратные скобки:

var str = "Я - современный браузер!";

alert(str[0]); // "Я"

Разница между этим способом и charAt заключается в том, что если символа нет – charAt выдает пустую строку, а скобки – undefined:

alert("".charAt(0)); // пустая строка

alert("" [0]); // undefined

Вообще же метод charAt существует по историческим причинам, ведь квадратные скобки – проще и короче.

Обратите внимание, str.length – это свойство строки, а str.charAt(pos) – метод, т.е. функция.

Важно!

Обращение к методу всегда идет со скобками, а к свойству – без скобок.

Изменения строк

Содержимое строки в JavaScript нельзя изменять. Нельзя взять символ посередине и заменить его. Как только строка создана – она такая навсегда.

Можно лишь создать целиком новую строку и присвоить в переменную вместо старой, например:

var str = "строка";

str = str[3] + str[4] + str[5];

alert(str); // ока

Смена регистра

Методы toLowerCase() и toUpperCase() меняют регистр строки на нижний/верхний:

alert("Интерфейс".toUpperCase()); // ИНТЕРФЕЙС

Пример ниже получает первый символ и приводит его к нижнему регистру:

alert("Интерфейс" [0].toLowerCase()); // 'и'

Поиск подстроки

Для поиска подстроки есть метод indexOf(подстрока[, начальная_позиция]).

Он возвращает позицию, на которой находится подстрока или -1, если ничего не найдено. Например:

var str = "Widget with id";

alert(str.indexOf("Widget")); // 0, т.к. "Widget" найден прямо в начале str

alert(str.indexOf("id")); // 1, т.к. "id" найден, начиная с позиции 1

alert(str.indexOf("widget")); // -1, не найдено, так как поиск учитывает регистр

Необязательный второй аргумент позволяет искать, начиная с указанной позиции. Например, первый раз "id" появляется на позиции 1. Чтобы найти его следующее появление – запустим поиск с позиции 2:

var str = "Widget with id";

alert(str.indexOf("id", 2)) // 12, поиск начат с позиции 2

Также существует аналогичный метод lastIndexOf(), который ищет не с начала, а с конца строки.


Поделиться с друзьями:

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.084 с.