§13. Специальные значения. Числа и строки как объекты.

Учимся программировать вместе с JavaScript
Глава II. Дополнительные сведения по базовому JavaScript.

§13. Специальные значения. Числа и строки как объекты.

Значение undefined. Максимально и минимально возможные значения чисел в JavaScript. Специальные числовые значения. Числа как объекты. Объект Number. Конструктор Number. Строка как массив символов. Строки как объекты. Метод String.fromCharCode(). Литералы как объекты.

Значение undefined. 

В JavaScript существует специальное значение, которое присваивается любой переменной в том случае, если её значение не определено. Например, мы можем просто создать переменную, не присваивая ей значения. В таком случае ей автоматически присваивается значение undefined. Пример: 

 

<script> 

var x; 

document.write(x); 

</script> 

 

 

Максимально и минимально возможные значения чисел в JavaScript. 

Любая переменная типа число может принимать значения в диапазоне от минимально возможного до максимально возможного. Связано это с тем, что для её хранения выделяется строго определённое количество бит. 

Бит – это элементарная ячейка памяти, которая может принимать значение 1 или 0. Соответственно в одном бите мы можем хранить числа от нуля до одного. Если возьмём два бита, то уже сможем хранить числа от 0 до 3. И т.д. 

В JavaScript переменные типа число занимают 64 бита, при этом они разделены на группы, каждая из которых имеет своё особое назначение. Поэтому в этих 64 битах можно хранить числа от (максимально возможное значение) до (минимально возможное значение). 

По приближению к нулю так же есть ограничение. Число не может быть ближе к нулю чем . 

 

Специальные числовые значения. 

В особых случаях числовым переменным можно присваивать специальные числовые значения. 

Infinityбесконечность. Присваивается переменной в том случае если число становится больше максимально возможного значения. Пример: 

 

var num = 1.7976931348623157E308; 

document.write(num,'<br>'); 

num = num+0.0000000000000001E308; 

document.write(num); 

 

 

-Infinityминус бесконечность. Присваивается переменной в том случае, если значение становится меньше наименьшего возможного: 

 

var num = -1.7976931348623157E308; 

document.write(num,'<br>'); 

num = num-1E308; 

document.write(num); 

 

 

NaNнечисло. Присваивается тогда, когда математическая операция не может быть выполнена: 

 

document.write(0/0,'<br>'); 

document.write('Строка'*2,'<br>'); 

 

 

Числа как объекты. 

Числа в JavaScript можно воспринимать как объекты. Соответственно у переменной типа число есть свойства и методы, которые приведены далее: 

toExponential(x) переводит число в строку в экспоненциальном виде. Экспоненциальный вид означает, что до точки должен быть один знак. Само число при этом должно быть умножено на 10 в нужной степени. Аргумент х – число знаков после точки. Если он не указан, то число выберется автоматически. Число знаков x должно находиться в диапазоне от 0 до 20. Пример: 

 

var r = 0.01/3; 

var s = r.toExponential(3); 

document.write('0.01/3 в обычном виде:',r,'<br>'); 

document.write('0.01/3 в експоненциальном виде:',s); 

 

 

toFixed(x) возвращает строку в не экспоненциальном виде. Аргумент xчисло знаков после точки. Если x не указано, то число округляется до ближайшего целого. Пример: 

 

var r = 100/3; 

document.write('r = ',r,'<br>'); 

var s = r.toFixed(3); 

document.write('r.toFixed(3) = ',s,'<br>'); 

s = r.toFixed(); 

document.write('r.toFixed() = ',s); 

 

 

toLocaleString преобразует число в строку в соответствии с региональными настройками компьютера. 

 

<script> 

var r = 10/3; 

document.write('r = ',r,'<br>'); 

document.write('r.toLocaleString() = ',r.toLocaleString(),'<br>'); 

</script> 

 

 

Обратите внимание, что при простом выводе числа используется точка, а при использовании метода toLocaleStringзапятая, так же количество знаков после точки (запятой) – разное. 

 

toPrecision(x) округляет число по количеству значащих цифр равному x. x – целое число от 1 до 21. Изучите пример, думаю будет понятно, как метод работает: 

 

<script> 

var r = 123456.789; 

document.write('r = ',r,'<br>'); 

document.write('r.toPrecision(7) = ',r.toPrecision(7),'<br>'); 

document.write('r.toPrecision(3) = ',r.toPrecision(3),'<br>'); 

</script> 

 

 

toString(x) – преобразует число в строку в соответствии с системой счисления переданной в качестве аргумента. Если x = 10 или аргумент отсутствует, то число преобразуется в десятичной системе счисления. Пример: 

 

<script> 

var r = 252; 

document.write('r = ',r,'<br>'); 

document.write('r.toString() = ',r.toString(),'<br>'); 

document.write('r.toPrecision(16) = ',r.toString(16),'<br>'); 

</script> 

 

 

valueOf – возвращает числовое значение. В явном вызове этого метода, как правило, не возникает необходимости. Пример: 

 

<script> 

var r = 252.12; 

document.write('r.valueOf() = ',r.valueOf(),'<br>'); 

</script> 

 

 

Объект Number. 

Плюсом ко всему в базовом JavaScript есть объект Number, свойства которого приведены далее в примере, и которыми можно пользоваться: 

 

<script> 

document.write('Number.MAX_VALUE = ',Number.MAX_VALUE,'<br>'); 

var r = Number.MIN_VALUE; 

document.write('Number.MIN_VALUE = ',r.toExponential(16),'<br>'); 

document.write('Number.NEGATIVE_INFINITY = ',Number.NEGATIVE_INFINITY,'<br>'); 

document.write('Number.POSITIVE_INFINITY = ',Number.POSITIVE_INFINITY,'<br>'); 

document.write('Number.NaN = ',Number.NaN); 

</script> 

 

 

Конструктор Number. 

Как было сказано, переменная типа число может восприниматься как объект, поэтому есть и конструктор Number, который создаёт объекты типа число. Пример: 

 

<script> 

var r = new Number(252.12); 

document.write('r = ',r,'<br>'); 

</script> 

 

Строка как массив символов. 

Каждая строка в JavaScript, как и в других языках, является массивом символов. Поэтому доступ к каждому отдельному символу в строке может быть осуществлён так же как к элементу массива. Причём первый символ так же имеет порядковый индекс 0. Пример: 

 

<script> 

var s = 'Привет всем!'; 

for (var i = 0; i < 12; i++) document.write(s[i]); 

</script> 

 

 

 

Примечание: т.к., по приведённому выше материалу, трудно придумать какие либо интересные задания, то с ним вы должны просто ознакомиться и применять в своей практике. 

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

 

Строки как объекты. 

Так же как и числа, переменные типа строка могут восприниматься как объекты. В таком виде становятся доступными свойство length и ряд методов. Далее в таблице они все представлены. 

 

Свойство/метод 

Описание 

length 

Свойство, содержащее в себе количество символов в строке. 

charAt(i) 

Возвращает символ из строки в позиции i. 

charCodeAt(i) 

Возвращает код символа из строки в позиции i. 

concat(s,t,u...) 

Возвращает строку соединённую с аргументами. 

indexOf(str,i) 

Производит поиск строки str с позиции i. Если i не указан, то str ищется с начала. Если str найдена, то indexOf возвращает её позицию, если нет, то возвращает -1. 

localeCompare(str) 

Сравнивает строку со строкой str, с учётом нюансов алфавитов различных стран. Если строка меньше str, то возвращает отрицательное число, и наоборот. Для сортировки слов, рекомендуется именно этот метод.  

slice(i_1,i_2) 

Возвращает подстроку, начинающуюся с позиции i_1, и заканчивающуюся позицией i_2. i_1 и i_2 могут быть отрицательными. В этом случае они указывают позицию с конца. 

split(str_split,lim) 

Делит строку на подстроки в тех местах, где встречается str_split. limколичество символов от начала строки, которое нужно разделить. Если lim не указан, то делится вся строка. Метод split возвращает массив получившихся подстрок. Для примера, если указать в качестве str_split пробел, то метод возвратит массив слов из этой строки. 

substr(i,count) 

Возвращает подстроку из count символов, начиная с позиции i. Если i отрицателен, то позиция отсчитывается с конца строки. 

toLowerCase() 

Возвращает строку, где все символы становятся в нижнем регистре. 

toString() 

Возвращает строку. Явный вызов метода практически не используется. 

toUpperCase() 

Возвращает строку, где все символы становятся в верхнем регистре. 

valueOf() 

Возвращает строку. Явный вызов метода практически не используется. 

toLocaleLowerCase() 

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

toLocaleUpperCase() 

Возвращает строку, где все символы становятся в верхнем регистре с учётом особенностей национальных алфавитов. 

 

Примечание: переменные типа массив так же можно воспринимать как объекты. В таком виде программисту доступны ряд свойств и методов, которые будут изучены в следующем параграфе. Сейчас при решении задач вам понадобится свойство length, которое есть у любого массива, и которое содержит количество элементов массива. 

 

Метод String.fromCharCode(). 

Для работы со строками существует отдельный метод String.fromCharCode(c_1,c_2,c_3...), который возвращает строку из символов, коды которых переданы в качестве аргументов. 

Примечание: данный метод является статическим, и вызываться он должен именно в виде String.fromCarCode(). О том, что такое статические методы речь будет ид позже. 

 

Литералы как объекты. 

Под словом литерал в данном случае будем понимать непосредственно число или строку в тексте кода. Литералы в JavaScript тоже являются объектами, и у них есть такие же свойства и методы, как вышеприведённые свойства и методы чисел и строк. Доступ к ним осуществляется так же через точку. Для примера, если мы захотим узнать длину слова «Привет», то нам не нужно создавать дополнительной переменной: 

 

var wordLength = 'Привет'.length;//count = 6 

 

Задачи. 

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

2. Создать функцию, находящую и выделяющую слово в тексте, сколько бы раз оно не встречалось. Создать пример её использования. 

3. Создать страницу с кодом программы. С помощью JavaScript выделить слова различным цветом в зависимости от назначения, так же как они выделены в редакторе кода, например в Notepad++. 

 

Примеры решений. 

1. 

<script> 

var s = 'Привет всем!'; 

//Свойство length 

document.write('<h4>Свойство length</h4><b>Код:</b><br><code>'); 

document.write('for (var i = 0; i < s.length; i++) document.write(s[i]);'); 

document.write('</code><br><b>Результат:</b><br>'); 

 

for (var i = 0; i < s.length; i++) document.write(s[i]); 

document.write('<hr>'); 

 

//Метод charAt(i) 

document.write('<h4>Метод charAt(i)</h4><b>Код:</b><br><code>'); 

document.write('for (var i = 0; i < s.length; i++) document.write(s.charAt(i));'); 

document.write('</code><br><b>Результат:</b><br>'); 

 

for (var i = 0; i < s.length; i++) document.write(s.charAt(i)); 

document.write('<hr>'); 

 

//Метод charCodeAt(i) 

document.write('<h4>Метод charCodeAt(i)</h4><b>Код:</b><br><code>'); 

document.write('for (var i = 0; i < s.length; i++) document.write(s.charCodeAt(i));'); 

document.write('</code><br><b>Результат:</b><br>'); 

 

for (var i = 0; i < s.length; i++) document.write(s.charCodeAt(i)); 

document.write('<hr>'); 

 

//Метод concat(i) 

document.write('<h4>Метод concat(i)</h4><b>Код:</b><br><code>'); 

document.write("var str = s.concat(' Здравстуйте,',' дорогие друзья!','&ltbr>');"); 

document.write('<br>'); 

document.write('document.write(str);'); 

document.write('</code><br><b>Результат:</b><br>'); 

 

var str = s.concat(' Здравстуйте,',' дорогие друзья!','<br>'); 

document.write(str); 

document.write('<hr>'); 

 

//Метод indexOf(str,i) 

document.write('<h4>Метод indexOf(str,i)</h4><b>Код:</b><br><code>'); 

document.write("var n = str.indexOf('дорогие');"); 

document.write('<br>'); 

document.write('if (n == -1)'); 

document.write('<br>'); 

document.write("&nbsp document.write('Строка ",'"дорогие"'," не найдена')"); 

document.write('<br>'); 

document.write('else'); 

document.write('<br>'); 

document.write("&nbsp document.write('Строка ",'"дорогие"'," начинается с позиции ',n);"); 

document.write('</code><br><b>Результат:</b><br>'); 

 

var n = str.indexOf('дорогие'); 

if (n == -1) 

  document.write('Строка "дорогие" не найдена') 

else 

  document.write('Строка "дорогие" начинается с позиции ',n); 

document.write('<hr>'); 

 

//Метод localeCompare(str) 

document.write('<h4>Метод localeCompare(str)</h4><b>Код:</b><br><code>'); 

document.write("if ('Петя'.localeCompare('Саша')<0)"); 

document.write('<br>'); 

document.write("&nbsp document.write('Петя < Саша')"); 

document.write('<br>'); 

document.write("else"); 

document.write('<br>'); 

document.write("&nbsp&nbspdocument.write('Петя > Саша');"); 

document.write('</code><br><b>Результат:</b><br>'); 

 

if ('Петя'.localeCompare('Саша')<0) 

  document.write('Петя < Саша') 

else 

  document.write('Петя > Саша'); 

document.write('<hr>'); 

 

//Методы slice(i_1,i_2) substr(i,count) 

document.write('<h4>Методы slice(i_1,i_2) substr(i,count)</h4><b>Код:</b><br><code>'); 

document.write("var sS = 'дорогие';"); 

document.write('<br>'); 

document.write("var sTemp = str.slice(str.indexOf(sS),str.indexOf(sS)+sS.length);"); 

document.write('<br>'); 

document.write("document.write(sTemp,'&ltbr>');"); 

document.write('<br>'); 

document.write("sTemp = str.substr(str.indexOf(sS),sS.length);"); 

document.write('<br>'); 

document.write("document.write(sTemp);"); 

document.write('</code><br><b>Результат:</b><br>'); 

 

var sS = 'дорогие'; 

var sTemp = str.slice(str.indexOf(sS),str.indexOf(sS)+sS.length); 

document.write(sTemp,'<br>'); 

sTemp = str.substr(str.indexOf(sS),sS.length); 

document.write(sTemp); 

 

document.write('<hr>'); 

 

//Метод split(str_split,lim) 

document.write('<h4>Метод split(str_split,lim)</h4><b>Код:</b><br><code>'); 

document.write("var m = str.split(' ');"); 

document.write('<br>'); 

document.write("for (var i = 0;i&ltm.length;i++) document.write(m[i],'&ltbr>');"); 

document.write('</code><br><b>Результат:</b><br>'); 

 

var m = str.split(' '); 

for (var i = 0;i<m.length;i++) document.write(m[i],'<br>'); 

document.write('<hr>'); 

 

//Методы toLowerCase() toUpperCase()  

//toLocaleLowerCase() toLocaleUpperCase() 

document.write('<h4>Методы toLowerCase() toUpperCase() ', 

         'toLocaleLowerCase() toLocaleUpperCase() </h4><b>Код:</b><br><code>'); 

document.write('document.write(str.toLowerCase());','<br>'); 

document.write('document.write(str.toUpperCase());','<br>'); 

document.write('document.write(str.toLocaleLowerCase());','<br>'); 

document.write('document.write(str.toLocaleUpperCase());','<br>'); 

document.write('</code><br><b>Результат:</b><br>'); 

 

document.write(str.toLowerCase()); 

document.write(str.toUpperCase()); 

document.write(str.toLocaleLowerCase()); 

document.write(str.toLocaleUpperCase()); 

</script> 

 

Свойство length 

Код: 
for (var i = 0; i < s.length; i++) document.write(s[i]); 
Результат: 
Привет всем! 

Shape 

Метод charAt(i) 

Код: 
for (var i = 0; i < s.length; i++) document.write(s.charAt(i)); 
Результат: 
Привет всем! 

Shape 

Метод charCodeAt(i) 

Код: 
for (var i = 0; i < s.length; i++) document.write(s.charCodeAt(i)); 
Результат: 
10551088108010741077109032107410891077108433 

Shape 

Метод concat(i) 

Код: 
var str = s.concat(' Здравстуйте,',' дорогие друзья!','<br>'); 
document.write(str); 
Результат: 
Привет всем! Здравстуйте, дорогие друзья! 

Shape 

Метод indexOf(str,i) 

Код: 
var n = str.indexOf('дорогие'); 
if (n == -1) 
document.write('Строка "дорогие" не найдена') 
else 
document.write('Строка "дорогие" начинается с позиции ',n); 
Результат: 
Строка "дорогие" начинается с позиции 26 

Shape 

Метод localeCompare(str) 

Код: 
if ('Петя'.localeCompare('Саша')<0) 
document.write('Петя < Саша') 
else 
  document.write('Петя > Саша'); 
Результат: 
Петя < Саша 

Shape 

Методы slice(i_1,i_2) substr(i,count) 

Код: 
var sS = 'дорогие'; 
var sTemp = str.slice(str.indexOf(sS),str.indexOf(sS)+sS.length); 
document.write(sTemp,'<br>'); 
sTemp = str.substr(str.indexOf(sS),sS.length); 
document.write(sTemp); 
Результат: 
дорогие 
дорогие 

Shape 

Метод split(str_split,lim) 

Код: 
var m = str.split(' '); 
for (var i = 0;i<m.length;i++) document.write(m[i],'<br>'); 
Результат: 
Привет 
всем! 
Здравстуйте, 
дорогие 
друзья! 
 

Shape 

Методы toLowerCase() toUpperCase() toLocaleLowerCase() toLocaleUpperCase() 

Код: 
document.write(str.toLowerCase()); 
document.write(str.toUpperCase()); 
document.write(str.toLocaleLowerCase()); 
document.write(str.toLocaleUpperCase()); 
 
Результат: 
привет всем! здравстуйте, дорогие друзья! 
ПРИВЕТ ВСЕМ! ЗДРАВСТУЙТЕ, ДОРОГИЕ ДРУЗЬЯ! 
привет всем! здравстуйте, дорогие друзья! 
ПРИВЕТ ВСЕМ! ЗДРАВСТУЙТЕ, ДОРОГИЕ ДРУЗЬЯ! 

 

 

 

2. 

<body> 

<div id = "text">Привет товарищи! Привет друзья! Привет все!</div> 

<script> 

function searchWord(s) 

{ 

  alert('Сейчас будет выделено слово '+s); 

  var s1 = '<span style = "background-color:yellow;">'; 

  var s2 = '</span>'; 

  var sTemp = text.innerHTML; 

  var mTemp = sTemp.split(s); 

  sTemp = ''; 

  for (var i = 0; i<mTemp.length-1; i++) sTemp = sTemp + mTemp[i] + s1 + s + s2; 

  sTemp = sTemp + mTemp[mTemp.length-1]; 

  text.innerHTML = sTemp; 

} 

searchWord('Привет'); 

</script> 

</body>