Използване на вградените обекти на JavaScript

JavaScript разполага с редица вградени обекти, които разширяват гъвкавостта на езика. Тези обекти са дата, математика, низ, масив и обект. Няколко от тези обекти са „заимствани“ от спецификацията на езика Java, но изпълнението на JavaScript от тях е различно. Ако сте запознати с Java, ще искате внимателно да разгледате вградените типове обекти на JavaScript, за да избегнете объркване.

Обектният модел на JavaScript е прост. По-голямата част от тези обекти се занимават със съдържание на прозореца - документи, връзки, формуляри и т.н. В допълнение към обектите със съдържание на прозорец, JavaScript поддържа малка шепа "вградени" обекти. Тези вградени обекти са достъпни независимо от съдържанието на прозореца и работят независимо от страницата, която браузърът ви е заредил.

Изучаване на JavaScript

Тази статия е част от архива на техническото съдържание на JavaWorld. Можете да научите много за програмирането на JavaScript, като четете статии от поредицата на JavaScript , просто имайте предвид, че част от информацията вероятно е остаряла. Вижте "Използване на JavaScript и формуляри" и "Отстраняване на грешки в програми за JavaScript" за повече информация относно програмирането с JavaScript.

Вградените обекти са дата, математика, низ, масив и обект. Всеки се използва по уникален и не съвсем последователен начин. Освен това по-новите версии на JavaScript (както се намира в Netscape "Atlas", в момента в бета версия) изпълняват няколко от тези обекти по различен начин, отколкото в Netscape 2.0. В тази колона ще обърнем внимание на тези вградени обекти и как да ги използваме. И ще отбележим странностите, с които ще се сблъскате, когато прилагате тези обекти към вашите JavaScript страници.

Разбиране на обекта низ

От всички обекти на JavaScript най-често се използва обектът String. В изпълнението на JavaScript на Netscape 2.0, новите низови обекти се създават неявно, като се използва променлива. Например,

var myString = "This is a string";

създава низ, с посочения текст, наречен myString.В Netscape 2.0, няма действителен обект, наречен низ, и опит за създаване на екземпляр на нов обект String с помощта на новия оператор води до грешка, тъй като String (или низ) не е дефинирана ключова дума . Във версията на Atlas на Netscape обаче String е добросъвестен обект и ключовата дума String може да се използва за създаване на нови низове. Следните два подхода са разрешени в Atlas, но не и в Netscape 2.0.

var myString = new String(); myString = "This is a string";

и

var myString = new String ("This is a string");

Низовите обекти имат едно свойство: дължина. Свойството length връща дължината на низа и използва синтаксиса, string.length,където string е името на променливата на низа. И двата показани по-долу дисплея 16.

alert ("This is a string".length)

и

var myString = "This is a string"; alert (myString.length);

Въпреки че може да има само едно свойство на низ, JavaScript поддържа голям брой методи, които могат да се използват със низове. Тези методи могат да бъдат грубо разделени на два широки лагера: управление на низове и текстов формат.

Още от JavaWorld

Искате ли още корпоративни новини за Java? Вземете бюлетина за JavaWorld Enterprise Java, доставен във вашата пощенска кутия.

Методи за управление на String включват substring, indexOf, lastIndexOf, и toLowerCase. Те се използват за връщане или промяна на съдържанието на низа по някакъв начин. Например методът на подниза връща определена част от низ. Методът indexOf определя местоположението на символ или група от символи в низ. И методът toLowerCase преобразува низа в малки букви. (Както можете да си представите, има и toUpperCaseметод.)

Методите за текстов формат се използват за форматиране на текст в документ по някакъв специален начин и се предоставят като алтернатива на използването на HTML тагове за същата цел. Тези методи включват големи, малки, sup, sub, anchor, link и blink.

Низовите методи могат да се използват директно върху низове или върху променливи, които съдържат низове. Методите винаги използват отворени и затворени скоби, дори ако методът не използва параметри. Например, за да конвертирате текст в главни букви, ще използвате едно от следните:

var tempVar = "this text is now upper case".toUpperCase();

или

var myString = "this text is now upper case"; var tempVar = myString.toUpperCase();

В Netscape 2.0 има само един String обект и всички низове са създадени от него. Обратно, низовете са първокласни обекти в Atlas и всеки нов низ се третира като отделен обект. Поведението на един обект на низове в Netscape 2.0 може да предизвика някои фини странични ефекти. Вземете следния сегмент на краткия скрипт. Създават се два низа: string1и string2. Ново свойство (наречено допълнително) се присвоява на string1. И все пак предупредителното съобщение показва, че свойството също вече принадлежи на string2.

 string1 = "this is string 1" string2 = "this is string 2" string1.extra = "new property" alert (string2.extra) 

Технически погледнато, низовете са „неизменяеми“ в JavaScript. Тоест съдържанието на низа е статично и не може да се променя. В Netscape 2.0 JavaScript може да модифицира низ само чрез създаване на ново местоположение в паметта за него. Поради това скрипт, който модифицира низ много пъти, е склонен към грешки в паметта. Всеки път, когато низът се променя, JavaScript създава ново местоположение в паметта за новата версия. Създават се нови низове преди събирането на боклука да унищожат стария низ. В крайна сметка JavaScript използва цялата си налична памет и възниква грешка "липсва памет".

Класически пример за този проблем може да се види в популярните JavaScript "превъртащи съобщения", където съобщение се превърта в лентата на състоянието или текстовото поле. За всеки проход скролерът предефинира променливата на низа, която се показва. В крайна сметка паметта се изчерпва, защото JavaScript създава нови екземпляри на низа с всяко преминаване. Например следният скрипт в крайна сметка (по-рано на някои платформи, като Windows 3.1) ще доведе до грешка "липсва памет":

 var count = 0; var text = "This is a test of a JavaScript scroller. "; scroll(); function scroll () { var myString = text.substring (count, text.length) + text.substring (0, count) window.status = myString if (count < text.length) count ++; else count = 0; setTimeout ("scroll()", 333); // 333ms is the minimum delay for Netscape 2.0 } 

Едно просто пренаписване избягва проблема със създаването на нови блокове памет. Изтрийте присвояването на променлива myString и анализирайте текста директно в лентата на състоянието, като използвате window.status.

window.status = text.substring (count, text.length) + text.substring (0, Count)

(Докато горният подход избягва проблема с репликацията на низови обекти на JavaScript, изтичането на памет все още се случва поради използването на setTimeout method. В продължение на много итерации - обикновено няколко хиляди или повече - setTimeout ще консумира цялата налична памет и в крайна сметка JavaScript ще покаже " съобщение за изчерпване на паметта.)

За справка, ето методите и свойствата, използвани с низовия обект на JavaScript:

Свойства на низа

дължина Дължината на низ

Струнни методи

котва Създава име на котва (хипертекстова цел)
голям Задава текст на голям
мига Задава мигащ текст
смело Задава получер текст
charAt Връща символа в определена позиция
фиксиран Задава текст с шрифт с фиксирана височина
шрифт цвят Задава цвета на шрифта
размер на шрифта Задава размера на шрифта
индекс на Връща първата поява на символ x, започвайки от позиция y
курсив Задава текста в курсив
lastIndexOf Returns the last occurrence of character x starting from position y
link Creates a hyperlink
small Sets text to small
strike Sets text to strikeout
sub Sets text to subscript
substring Returns a portion of a string
sup Sets text to superscript
toLowerString Converts a string to lowercase
toUpperString Converts a string to uppercase

Using JavaScript as a scientific calculator

JavaScript's Math object provides advanced arithmetic and trigonometric functions, expanding on JavaScript's basic arithmetic operators (plus, minus, multiply, divide). The Math object in JavaScript is borrowed from Java. In fact, the implementation of the Math object in JavaScript closely parallels the Math class in Java, except that the JavaScript Math object offers fewer methods.

JavaScript's Math object properties are treated as constants. In fact, the property names are in all upper-case, following the usual convention of capitalizing variable constants. These properties return often-used values, including pi and the square root of 2. The Math methods are used in mathematical and trigonometric calculations. Handy Math-object methods include ceil, floor, pow, exp (exponent), max, min, round, and random. (Random is only available when using the X Window platform, however.)

The Math object is static, so you don't need to create a new Math object in order to use it. To access the properties and method of the Math object, you merely specify the Math object, along with the method or property you wish. For example, to return the value of pi, you use:

var pi = Math.PI;

Similarly, to use a math method you provide the name of the method, along with the parameters you wish to use. For example, to round the value of pi, you'd use:

var pi = Math.PI; var pieAreRound = Math.round(pi); // displays 3

Note that you must specify the Math object by name for each Math method/property you wish to use. JavaScript does not recognize the keywords PI and round all by themselves. Exception: you may use the with statement to associate the names of methods and properties with the Math object. This technique is a handy space-saver when you must use several Math properties and methods. The previous example can be written as

with (Math) { var pi = PI; var pieAreRound = round(pi); alert (pieAreRound) }

For your reference, here are the properties and methods supported by JavaScript's Math object.

Math Properties

E Euler's constant
LN2 The natural logarithm of 2
LN10 The natural logarithm of 10
LOG2E The base 2 logarithm of e
LOG10E The base 10 logarithm of e
PI The numeric equivalent of PI: 3.14 etc.
SQRT1_2 The square root of one-half
SQRT2 The square root of 2

Math Methods

abs Returns the absolute value of a number
acos Returns the arc cosine of a number
asin Returns the arc sine of a number
atan Returns the arc tangent of a number
ceil Returns the least integer greater than or equal to a number
cos Returns the cosine of a number
exp Returns e (Euler's constant) to the power of a number
floor Returns the greatest integer less than or equal to its argument
log Returns the natural logarithm (base e) of a number
max Returns the greater of two values
min Returns the lesser of two values
pow Returns the value of a number times a specified power
random Returns a random number (X-platforms only)
round Returns a number rounded to the nearest whole value
sin Returns the sine of a number
sqrt Returns the square root of a number
tan Returns the tangent of a number

Asking JavaScript for a date

Also borrowed by Java is the Date object, which can be used in JavaScript to determine the current time and date. A popular JavaScript application of the Date object is displaying a digital clock in a text box. The script uses the Date object to update the clock once every second. You also use the Date object to perform date math. For example, your script might determine the number of days between now and a certain future date. You can use this to display a "countdown," such as the number of days left of your company's big sale.

JavaScript treats the Date object like a constructor class. To use Date you must create a new Date object; you can then apply the various Date methods to get and set dates. (The Date object has no properties.) If you're familiar with the Date class in Java, you'll find the properties of the JavaScript Date object largely the same. The most commonly used methods are the get methods, which obtain the time and date of the value in the Date object. These methods are:

  • getHours() - Returns the hour
  • getMinutes() - Returns the minutes
  • getSeconds() - Returns the seconds
  • getYear() - Returns the year ("96" is 1996)
  • getMonth() - Returns the month ("0" is January)
  • getDate() - Returns the day of the month
  • getDay() - Returns the day of the week ("0" is Sunday)

(Обектът Date на JavaScript също предвижда настройка на часа и датата на обекта Date, но те рядко се използват.)

Изграждането на нов обект Date може да има няколко форми. За да върнете обект, съдържащ текущата дата и час, използвате обекта Date без параметри. По-долу date_objе нов обект, съдържащ стойността на текущата дата и час, зададени от системния часовник на компютъра.

var date_obj = new Date();

Като алтернатива можете да посочите датата и часа като част от конструктора на датата. Всеки от тези методи е разрешен - и двамата задават новия обект за дата на 1 януари 1997 г. в полунощ местно време.

var date_obj = new Date ("January 1 1997 00:00:00")

и

var date_obj = new Date (97, 0, 1, 12, 0, 0)

За да използвате метод Date, добавете метода към обекта за дата, който сте създали преди това. Например, за да върнете текущата година, използвайте:

var now = new Date(); var yearNow = now.getYear();

За справка, ето методите, поддържани от обекта Date на JavaScript.