Лаб 2 (1075651), страница 2
Текст из файла (страница 2)
Однако, если на первом месте в строкебудет находиться не цифра, то возвращенный ими результат будет NaN (нечисло).Функция в форме parseInt(str, base) позволяет разобрать числа в указанной baseсистеме счисления.Некоторые примеры из [1]:parseInt("3 слепых мышки"); // Вернет 3parseFloat("3.14 метров"); // Вернет 3.14parseInt("12.34"); // Вернет 12parseInt("0xFF"); // Вернет 255parseInt("11", 2); // Вернет 3 (1*2 + 1)parseInt("ff", 16); // Вернет 255 (15*16 + 15)parseInt("zz", 36); // Вернет 1295 (35*36 + 35)parseInt("077", 8); // Вернет 63 (7*8 + 7)parseInt("077", 10); // Вернет 77 (7*10 + 7)Логические операцииЛогический тип имеет значения true или false аналогично boolean в C++.Поддерживается почти аналогичный набор логических операций.Пример:if (a == 4)b = b + 1;elsea = a + 1;Имеется дополнительный оператор тождественного сравнения = = =(троекратное =), который отличается от == (двойное =) тем, что операндыдолжны совпадать по типу, а неявное преобразование к ним не будетприменено:if (a === "4") // только строки!b = b + 1;if (a === 0) // только число 0b = b + 1;if (a == 0) // число 0 или пустая строкаb = b + 1;.Имеющиеся операторы сравнения представлены в таблице 1.
Дляопределённости примем, что предварительно выполнено присвоение x=5.Таблица 1 Операторы сравнения JavascriptОператор ОписаниеПример (x=5)Результат8Оператор Описание==РавенствоПример (x=5)x==8x==5===Равенство с учетом типаx==="5"x===5!=НеравенствоНеравенство с учетом типаx!=8БольшеМеньшеБольше или равноМеньше или равноx>8!==><>=<=x!=="5"x!==5x<8x>=8x<=8РезультатfalsetruefalsetruetruetruefalsefalsetruefalsetrueПоддерживаются следующие выражения, позволяющие организоватьветвление процесса:if (condition) {…} else {…}variablename=(condition)?value1:value2switch(n){case 1:execute code block 1break;case 2:execute code block 2break;default:code to be executed if n is different from case 1 and 2}ЦиклыВыражения для формирования циклов в Javascript аналогичны C/C++ заисключением конструкции for (item in list){…}.for (i=0; i<5; i++) {x=x + "The number is " + i + "<br />";}while (i<5) {x=x + "The number is " + i + "<br />";i++;}do {x=x + "The number is " + i + "<br />";i++;} while (i<5);var person={fname:"John",lname:"Doe",age:25};for (x in person) { txt=txt + person[x]; }9ФункцииФункции в Javascript задаются в форме:function sum (a,b) // декларируем функцию sum с двумя аргументами{return a+b;}Обратите внимание на то, что возвращаемый результат не декларируетсяявно.
Передаваемые параметры a, b не имеют типа, однако попытка передатьзначения неправильного типа приведут к ошибке при выполнении кода!Существует возможность определить функциональный литерал вследующей форме:var sum = function sum (a,b) { return a+b; };В дальнейшем использование sum будет выглядеть аналогично явноопределенной функции, однако реальную функцию в sum можно в любоймомент переопределить.ОбъектыОбъект – это коллекция именованных значений, которые обычноназывают свойствами (properties) объекта. Важно то, что в Javascript свойстваобъекта могут быть добавлены при выполнении.Пример:var point = new Object(); // создаём пустой объект !!!point.x = 2.3;// присоединяем свойство xpoint.y = 1.2;// присоединяем свойство yОбращение к свойствам может производиться либо в форме:point.xлибо в форме ассоциативного массива:point["x"]Объектные литералы позволяют задавать значения объектов в коде.Объектные литералы могут быть простыми:var point = { x:2.3, y:1.2 };или вложенными:var rectangle = {upperLeft: { x: 2, y: 2 },lowerRight: { x: 4, y: 4 }};Любой объект может быть преобразован в строку вызовом методаtoString().МассивыМассивы, как и объекты, являются коллекциями значений, но важноеотличие состоит в том, что каждый из элементов имеет номер.
Нумерацияэлементов в Javascript начинается с нуля, как и в C. Объект-массив создаетсяпри помощи конструктора Array().10Пример массива, элементы которого произвольны:var a = new Array();a[0] = 1.2;a[1] = "JavaScript";a[2] = true;a[3] = { x:1, y:3 };Инициализация массива при создании:var a = new Array(1.2, "JavaScript", true, { x:1, y:3 });Создание массива на указанное количество элементов:var a = new Array(10);Литерал массива - это список разделенных запятыми значений,заключенных в квадратные скобки. Допустима инициализация массива сразнородными объектами:var a = [1.2, "JavaScript", true, { x:1, y:3 }];Инициализация двумерного массива:var matrix = [[1,2,3], [4,5,6], [7,8,9]];Инициализация массива динамически вычисленными значениями:var base = 1024;var table = [base, base+1, base+2, base+3];Переменные и их области видимостиПеременные в Javascript не имеют типа! Тип имеет только значениепеременной, поэтому переменная, которая не была инициализированаконкретным значением, не может иметь тип.
Более того, одна и та жепеременная может принимать значения различных типов в разные моментывремени, однако всегда можно проверить, была ли переменная вообщеинициализирована.Javascript позволяет определять глобальные и локальные переменные.Отсутствует блочная видимость в том виде, как это реализовано в языках C иC++.Пример:function test(o) {var i = 0; // i определена во всей функцииif (typeof o == "object") {var j = 0; // j определена везде, а не только в блокеfor(var k = 0; k < 10; k++) { // k определена везде, не только в циклеdocument.write(k);}document.write(k); // k все еще определена: печатается 10}document.write(j); // j определена, но может быть не инициализирована}11Основной принцип распространения видимости переменных следующий:переменные доступны в текущей функции и во всех вложенных функциях (тоесть определённых в коде этой функции).
Глобальные переменные, т.е.переменные, определенные вне функций, доступны везде.var x = function(){var i;mul = function(b) { return i*b; }for(fact = i = 1; i < 10; i++) {fact = mul(fact);document.write(i + "! = " + fact + "<br />");}}Локальными переменными являются аргументы функций, а также переменные,не найденные в контексте выше, либо объявленные со служебным словом var.Пример:var scope = "глобальная";function f() {alert(scope); // Показывает "глобальная".scope = "локальная"; // Переменная глобальная.alert(scope); // Показывает "локальная"}f();alert(scope); // Показывает "локальная"Укажем внутри функции декларацию var scope.var scope = "глобальная";function f() {alert(scope); // Показывает "undefined", а не "глобальная".var scope = "локальная"; // Переменная инициализируется здесь,// но определена она везде в функции.alert(scope); // Показывает "локальная"}f();alert(scope); // Показывает "глобальная".Переменные могут не декларироваться, однако для того, чтобы объявитьглобальную переменную необходимо либо объявить её со служебным словомvar, либо присвоить значение.Пример, который вызовет ошибку:function f1() {scope = "123"; // Переменная инициализируется здесьalert(scope);}function f2() {alert(scope); // Переменная нигде не объявлена}Добавим переменную scope явноvar scope;function f1() {scope = "123"; // Переменная инициализируется здесьalert(scope);}12function f2() {alert(scope);}f2();// Показывает "undefined"f1();// Показывает "123"f2();// Показывает "123"Зададим переменной scope тип строки:var scope = "";function f1() {scope = "123"; // Переменная инициализируется здесьalert(scope);}function f2() {alert(scope);}f2();// Показывает "" (пустая строка)f1();// Показывает "123"f2();// Показывает "123"Основные операторы и инструкцииЯзык Javascript имеет сходство с языками С++ и Java, поэтому в видуограниченного объема изложения, подробно на них останавливаться не будем.Тем не менее, их следует изучить в главах 5 и 6 книги [1].Объекты и классыЯзык Javascript является объектно-ориентированным языком, но не имеетклассов в понимании классов С++ или Java.Любая переменная может получить значение-объект.
Если ни однапеременная не хранит ссылку на этот объект, он будет удалён. Каждый изобъектов конструируется самостоятельно. При этом объекту могут бытьдинамически назначены свойства и методы.Воспользуемся примерами из [1].// Определяем конструктор.// Обратите внимание, как инициализируется объект с помощью "this".function Rectangle(w, h) {this.width = w;this.height = h;}// Вызываем конструкторы для создания двух объектов Rectangle.// И проинициализируем оба новых объекта.var rect1 = new Rectangle(2, 4); // rect1 = { width:2, height:4 };var rect2 = new Rectangle(8.5, 11); // rect2 = { width:8.5, height:11 };В роли конструктора объекта выступает функция Rectangle.
При этом длядобавления свойств объекта использован указатель this.Добавить метод к конкретному объекту можно следующим образом:r.area = function() { return this.width * this.height; }// Теперь рассчитать площадь, вызвав метод объектаvar a = r.area();13Добавить метод так, чтобы объект получал его на этапе вызова конструктораможно следующим образом:function Rectangle(w, h) {this.width = w;this.height = h;this.area = function( ) { return this.width * this.height; }}Указанный метод не является оптимальным.