Monografias.com > Sin categoría
Descargar Imprimir Comentar Ver trabajos relacionados

Tutorial de Jscript (página 2)




Enviado por Everts Garay



Partes: 1, 2, 3, 4, 5

Asignaciones e igualdad

El signo igual (=) se utiliza en JScript para indicar
una acción
en la que se asigna un valor. Es
decir, una instrucción de código
JScript podría decir

unEntero = 3;

Significa "Asigna el valor 3 a la variable unEntero" o
"unEntero recibe el valor 3". Cuando desee comparar dos valores para
averiguar si son iguales, deberá utilizar un par de
signos de
igual (==). Este aspecto se ve con más detalle en
Controlar el flujo del programa.

Expresiones

Una expresión JScript es algo que una persona puede
leer como una expresión de tipo Boolean o como una
expresión numérica. Las expresiones contienen
caracteres de símbolos como "+" en lugar de palabras como
"sumado a". Una expresión está formada por
cualquier combinación válida de valores, variables,
operadores y expresiones.

var unaExpresion= "3 * (4 / 5)";

var unaSegundaExpresion = "Math.PI * radio *
2";

var unaTerceraExpresion = unaSegundaExpresion + "%" +
unaExpresion;

var unaCuartaExpresion = "(" + unaSegundaExpresion + ")
% (" + unaExpresion + ")";

Variables de
JScript

Las variables se utilizan el Microsoft
JScript para almacenar valores en sus secuencias de comandos. Son un
método
para recuperar y manipular valores mediante nombres de cadenas.
Cuando se utilizan correctamente pueden ayudar a comprender el
funcionamiento de una secuencia de comandos.

Declarar variables

Aunque no es necesario, se considera una buena
práctica declarar las variables antes de utilizarlas. Se
hace utilizando la instrucción var. La única
ocasión en la que se debe utilizar la instrucción
var es al declarar variables locales a una función.
En las restantes ocasiones, utilizar la instrucción
var para declarar las variables antes de utilizarlas es
una práctica recomendada. Los siguientes ejemplos de
código son sobre la declaración de
variables:

var mim = "Un hombre, un
plan, un
canal, !Panamá!";
// El valor almacenado en mim es del tipo cadena.

// La frase entre comillas, el valor asignado a mim, es
un literal de cadena.

var ror = 3; // El valor almacenado en ror es de tipo
numérico.

var nen = true; // El valor almacenado en nen es de tipo
Boolean.

var fif = 2.718281828 // El valor almacenado en fif es
de tipo numérico.

Nombrar variables

JScript es un lenguaje que
distingue entre mayúsculas y minúsculas, por tanto,
es diferente llamar a una variable miContador que llamarla
MIContador. Además, los nombres de las variables,
que pueden tener cualquier longitud, deben seguir ciertas
reglas:

  • El primer carácter debe ser una letra
    (mayúscula o minúscula) o un carácter de
    subrayado (_), o un signo de dólar ($).
  • Los siguientes caracteres pueden ser letras,
    números, caracteres de subrayado o signos de
    dólar.
  • El nombre de una variable no puede ser una palabra
    reservada.

Algunos ejemplos de nombres de variables
válidos:

  • _numeropaginas
  • Parte9
  • Numero_elementos

Algunos nombres de variables no
válidos:

  • 99Globos // Comienza con un
    número.
  • Smith&Wesson // El signo & no es un
    carácter válido para los nombres de las
    variables.

En los casos en los que quiera declarar una variable e
iniciarla sin proporcionar ningún valor concreto,
deberá asignarle un valor especial,
null.

var zaz = null;

var notanto = 3 * zaz; // En este punto, notanto se
convierte en 0.

Si declara una variable sin asignarla un valor, la
variable existirá, pero será no
definida.

var godot;

var esperarA= 1 * godot; // Asigna el valor NaN a
esperarA, ya que godot no está definida.

Una variable se puede definir de forma implícita
(sin utilizar var) tan sólo con asignarle un valor.
Sin embargo, no se puede utilizar una variable que aún no
haya sido declarada de ningún modo. Si lo hace
obtendrá un error en tiempo de
ejecución.

lel = ""; // La variable se declara de forma
implícita.

var unLio = vyv + zez; // Genera un error, ya que vyv y
zez no existen.

Conversión

Dado que JScript es un lenguaje en el que no es
necesario declarar los tipos de datos,
las variables en JScript técnicamente no tienen un tipo
fijo. En cambio, tienen
un tipo equivalente al tipo del valor que contienen. Bajo
determinadas circunstancias, es posible forzar la
conversión automática de una variable de un tipo de
dato en un tipo diferente. Se pueden incluir números en
las cadenas, pero las cadenas no se pueden incluir directamente
en los números, por lo que se proporcionan las funciones de
conversión explícitas,
parseInt() y
parseFloat().

var elDesde = 1;

var elHasta = 10;

var queHacer= "Contar desde ";

queHacer+= elDesde + " hasta " + elHasta +
".";

Después de ejecutar este código la
variable queHacer contiene "Contar desde 1 hasta 10." El
dato numérico ha sido convertido en una cadena.

var ahoraQue= 0;

ahoraQue+= 1 + "10"; // En este caso, como "10" es una
cadena,

// el operador "+=" la concatena..

Después de ejecutar el código, la variable
ahoraQue contiene "0110". Para obtener este resultado se
han seguido los siguientes pasos:

  1. Comprobar los tipos de 1 y "10". "10" es una cadena,
    1 es un número, por tanto, el número se
    convertirá en una cadena.
  2. Dado que los valores
    de ambos lados del operador + son cadenas, se realiza
    una concatenación de ellas. El resultado es
    "110"
  3. Comprueba los tipos de ambos lados del operador +=.
    ahoraQue contiene un número y "110" es una
    cadena, así que se convierte el número en una
    cadena.
  4. Como ahora hay cadenas a ambos lados del operador +=,
    se realiza una concatenación de cadenas. El resultado es
    "0110".
  5. Este resultado se almacena en
    ahoraQue.

var entonces = 0;

entonces+= 1 + parseInt("10"); // En este caso, "+=" realiza una suma.

Después de ejecutar este código, la
variable entonces contiene el entero 11.

Tipos de datos de
JScript

¿Qué son los tipos de datos de
JScript?

Microsoft JScript tiene seis tipos de datos. Los tipos
principales son: numéricos, cadenas, objetos y Boolean.
Los otros dos son null y no
definido
.

Tipo de dato Cadena

Las cadenas están delimitadas por comillas
simples o dobles. (Utilice comillas simples para delimitar
cadenas que utilicen comillas dobles.) Una cadena también
es un objeto en JScript, pero es un caso especial, con
propiedades especiales. A continuación hay ejemplos de
cadenas:

"La vaca saltó sobre la luna."

'"¡Es imposible!" gritó el
hombre.'

"42"

Una cadena puede contener cero o más caracteres
unicode. Cuando no contiene ninguno, se denomina cadena de
longitud cero ("").

Tipo de dato numérico

JScript permite utilizar números enteros y en
coma flotante. Los enteros pueden ser positivos, 0 o negativos;
un número en coma flotante puede contener un punto
decimal, , una "e" (mayúscula o minúscula), que se
utiliza para representar "diez a la potencia de" en
notación científica, o ambos. Estos números
siguen el estándar IEEE 754 para la representación
numérica. Por último, algunos valores
numéricos son especiales:

  • NaN, o no un número
  • Infinito positivo
  • Infinito negativo
  • Positivo 0
  • Negativo 0

Los enteros se pueden representar en base 10 (decimal),
base 8 (octal), y base 16 (hexadecimal).

Los enteros octales se especifican anteponiendo un "0" y
pueden contener dígitos del 0 al 7. Si un número
está precedido por un "0" pero contiene los dígitos
"8" o "9", es un número decimal. Si un número que
de otro modo sería un octal contiene la letra "e" (o "E")
se genera un error.

Los enteros hexadecimales ("hex") se especifican
anteponiendo "0x" (la "X" puede ser mayúscula o
minúscula) y pueden contener los dígitos del 0 al 9
y las letras de la A a la F (mayúsculas o
minúsculas). La letra "e" es un dígito permisible
en la notación hexadecimal y no indica la existencia de un
número exponencial. Las letras de la A a la F se utilizan
para representar, como dígitos simples, los números
que van del 10 al 15 en base 10. Es decir, 0xF equivale a 15 y
0x10 equivale a 16.

Los números octales y hexadecimales pueden ser
negativos, pero no fracciones. Un número que comience con
un único "0" y contenga un punto decimal es un
número decimal en coma flotante, si un número que
comienza con "0x" o "00" contiene un punto decimal, cualquier
cosa que aparezca a la derecha de dicho punto será
ignorado.

Algunos ejemplos de números:

.0001, 0.0001, 1e-4, 1.0e-4 // Cuatro números en
coma flotante, todos ellos equivalentes.

3.45e2 // Un número en coma flotante, equivalente
a 345.

42 // Un número entero.

0377 // Un entero octal, equivalente a 255.

00.0001 // Como los números octales no pueden
tener decimales, éste equivale a 0.

0378 // Un entero, equivalente a 378.

0Xff // Un entero hexadecimal, equivalente a
255.

0x37CF // Un entero hexadecimal, equivalente a
14287.

0x3e7 // Un entero hexadecimal, equivalente a
999.

0x3.45e2 // Como los números hexadecimales no
pueden tener partes decimales, éste equivale a
3.

Tipo Boolean

Los posibles valores de tipo Boolean son true y
false. Son valores especiales, y no se pueden utilizar
como 1 y 0.

Nota  En una comparación,
cualquier expresión que se evalúe como 0 se
tomará como false, y cualquier expresión que se
evalúe como un número distinto de cero se
tomará como true. Así, la siguiente
expresión se evalúa como true: (false ==
0)

Para obtener más información acerca de las comparaciones,
vea Controlar el flujo del programa.

Tipo de dato no definido

Un valor no definido es simplemente un valor asignado a
una variable después de crearla, pero antes de que se le
haya asignado un valor.

Tipo de dato Null

Un valor null es uno que no tiene valor y no
significa nada.

Operadores de JScript

JScript tiene un amplio conjunto de operadores,
incluidos aritméticos, lógicos, de bits y de
asignación. También existen algunos operadores
variados.

Cálculo

Lógicos

De bits

Asignación

Varios

Descripción

Símbolo

Descripción

Símbolo

Descripción

Símbolo

Descripción

Símbolo

Descripción

Símbolo

Negación unaria

NOT lógico

!

NOT de bits

~

Asignación

=

delete

delete

Incremento

++

Menor que

<

Desplazamiento de bits hacia la
izquierda

<<

Asignación compuesta

OP=

typeof

typeof

Decremento

Mayor que

>

Desplazamiento hacia la derecha

>>

void

void

Multiplicación

*

Menor que o igual a

<=

Desplazamiento a la derecha sin signo

>>>

División

/

Mayor que o igual a

>=

AND de bits

&

Módulo aritmético

%

Igualdad

==

XOR de bits

^

Adición

+

Desigualdad

!=

OR de bits

|

Sustracción

AND lógico

&&

OR lógico

||

Condicional (trinario)

?:

Coma

,

Identidad

===

No identidad

!==

Precedencia de operadores

En JScript los operadores se evalúan en un orden
particular. Este orden se conoce como la precedencia de
operadores. La siguiente tabla muestra una lista
de los operadores en orden de precedencia de mayor a menor. Los
operadores de la misma fila se evalúan de izquierda a
derecha.

Operador

Descripción

. [] ()

Acceso a campos, indexación de matrices y llamadas a funciones

++ — – ~ ! typeof new void delete

Operadores unarios, tipos de datos devueltos,
creación de objetos, valores no
definidos

* / %

Multiplicación, división,
división módulo

+ – +

Adición, sustracción,
concatenación de cadenas

<< >> >>>

Desplazamiento de bits

< <= > >=

Menor que, menor que o igual a, mayor que, mayor
que o igual a

== != === !==

Igualdad, desigualdad, identidad, no identidad

&

AND de bits

^

XOR de bits

|

OR de bits

&&

AND lógico

||

OR lógico

?:

Condicional

= OP=

Asignación, asignación con
operación

,

Evaluación múltiple

Los paréntesis se usan para modificar el orden de
evaluación. La expresión encerrada
entre paréntesis se evalúa por completo antes de
usar su valor en el resto de la instrucción.

Un operador con mayor precedencia se evalúa antes
que uno con menor precedencia. Por ejemplo:

z = 78 * (96 + 3 + 45)

En esta expresión hay cinco operadores: =, *, (),
+ y +. Según las normas de
precedencia, se evalúan en el siguiente orden: (), *, +,
+, =.

  1. Lo primero es la evaluación de la
    expresión que está encerrada entre
    paréntesis: Hay dos operadores de adición y
    tienen la misma precedencia: Se suma 96 y 3 y al total
    resultante se suma 45, dando como resultado un valor igual a
    144.
  2. Lo siguiente es la multiplicación: Se
    multiplican 78 y 144, dando como resultado un valor igual a
    11232.
  3. Por último se realiza la asignación: Se
    asigna 11232 a z.

Controlar el
flujo del programa

¿Por qué controlar el flujo de la
ejecución?

Muy frecuentemente, es necesaria una secuencia de
comandos para funciones diferentes bajo diferentes condiciones.
Por ejemplo, podría escribir una secuencia de comandos que
comprobara la hora cada hora y que cambiara algún
parámetro durante el transcurso del día.
Podría escribir una secuencia de comandos que acepta
algún tipo de entrada y actúa de una u otra forma
según la entrada proporcionada. O podría escribir
una secuencia de comandos que repita una acción
especificada.

Es posible comprobar muchos tipos de condiciones. Todas
las comprobaciones condicionales en Microsoft JScript son de tipo
Boolean, por lo que el resultado de cualquier comprobación
es true o false. Puede comprobar valores
numéricos, de tipo Boolean o cadenas
indistintamente.

JScript proporciona estructuras de
control para un
amplio intervalo de posibilidades. Las estructuras de control
más sencillas son las instrucciones
condicionales.

Usar instrucciones condicionales

JScript admite las instrucciones condicionales if
e if…else. En las
instrucciones if se comprueba una condición y si la
condición cumple la comprobación, se ejecuta
algún código de JScript que haya escrito. (En la
instrucción if…else, se ejecuta un código
distinto si la condición no cumple la
comprobación.) La forma más sencilla de una
instrucción if se puede escribir completamente en
una sola línea, pero se usan mucho más las
instrucciones if e if…else de múltiples
líneas.

Los siguientes ejemplos demuestran distintas sintaxis
que puede usar con las instrucciones if e
if…else. El primer ejemplo muestra el tipo de
comprobación Boolean más sencillo. Si (y
sólo si) el elemento encerrado entre paréntesis da
como resultado true, se ejecuta la instrucción o el
bloque de instrucciones que sigue a la instrucción
if.

// La función smash() se define en cualquier otra
parte del código.

if (newShip)

smash(champagneBottle,bow); // Comprobación de
tipo Boolean para saber si newShip es true.

// En este ejemplo, la comprobación no se cumple
a menos que ambas condiciones sean verdaderas.

if (rind.color ==
"amarillo oscuro" && rind.texture == "arrugas grandes y
pequeñas")

{

laRespuesta = ("¿Es un melón? <br>
");

}

// En este ejemplo, la comprobación se cumple si
cualquiera de las condiciones es verdadera.

var laReaccion = "";

if ((PesoEnLibras > 15) || (PesoEnLibras >
45))

{

laReaccion = ("¡Qué lindo gatito!
<br>");

}

else

laReaccion = ("¡Es un gato enorme!
<br>");

Operador condicional

JScript también admite una forma condicional
implícita. Utiliza un signo de interrogación
después de la condición que va a comprobar (en
lugar de la palabra if antes de la condición) y
especifica dos alternativas, una para usarla si la
condición se cumple y otra para usarla si no se cumple.
Las alternativas están separadas por dos
puntos.

var horas = "";

// Código que especifica que la variable horas
tiene el contenido de

// laHora o laHora – 12.

horas += (laHora >= 12) ? " p.m." : "
a.m.";

 

Sugerencia   Si tiene que comprobar
varias condiciones juntas y sabe que alguna tiene
más posibilidades de cumplirse, o de no cumplirse,
que las demás, dependiendo de si las
comprobaciones están conectadas OR (||) o con AND
(&&), puede sacrificar la velocidad de ejecución de su
secuencia de comandos colocando esa condición
primero en la instrucción condicional. Por
ejemplo, si tres condiciones deben ser verdaderas (usando
operadores &&) y la segunda comprobación
no se cumple, no se comprueba la tercera
condición.

De forma similar, si de varias condiciones,
sólo una debe ser verdadera (usando operadores
||), la comprobación se detiene cuando cualquier
condición cumple la comprobación. Esto es
particularmente efectivo si las condiciones que desea
comprobar implican la ejecución de llamadas a
funciones o de otro código.

Un ejemplo de los efectos secundarios de
cortocircuito, es que en el siguiente ejemplo no se
ejecutará ejecutarsegundo si ejecutarprimero()
devuelve 0 o false.

if ((ejecutarprimero() == 0) ||
(ejecutarsegundo() == 0))

// algún código

 

Usar repeticiones o bucles

Existen varias formas de ejecutar una instrucción
o un bloque de instrucciones repetidas veces. En general, la
ejecución repetitiva se llama ejecución en
bucle
. Normalmente se controla mediante la
comprobación de alguna variable cuyo valor cambia cada vez
que se ejecuta el bucle. Microsoft JScript es compatible con
muchos tipos de bucles:
for,
for…in,
while,
do…while y
switch.

Usar bucles for

La instrucción for especifica una variable
de contador, una condición de comprobación y una
acción que actualiza el contador. Justo antes de cada
ejecución del bucle (esto se llama una iteración
del bucle), se comprueba la condición. Después de
ejecutar el bucle, la variable de contador se actualiza antes de
comenzar la siguiente iteración.

Si nunca se cumple la condición del bucle,
éste nunca se ejecuta. Si la condición del bucle se
cumple siempre, el bucle se convierte en un proceso
infinito. Aunque es posible que lo primero sea necesario en
algunos casos, lo segundo, raramente lo es. Por lo que debe tener
cuidado al escribir las condiciones de sus bucles.

/*

La expresión de actualización ("icount++"
en los siguientes ejemplos)

se ejecuta al final del bucle, después de que el
bloque de instrucciones que forman el

cuerpo del bucle se ejecuta y antes de comprobar la
condición.

*/

var limite = 11; // Establece un límite de 11 en
el bucle.

var suma = new Array(limite); // Crea una matriz llamada
suma con 11 miembros, desde 0 hasta 10.

var laSuma = 0;

suma[0] = 0;

for(var icount = 1; icount < limite; icount++) { //
En este caso, cuenta desde 1 hasta 10.

laSuma += icount;

suma[icount] = laSuma;

}

var nuevaSuma = 0;

for(var icount = 1; icount > limite; icount++) { //
Esto nunca se ejecuta.

nuevaSuma += icount;

}

var suma = 0;

for(var icount = 1; icount > 0; icount++) { // Esto
es un bucle infinito.

suma += icount;

}

Usar bucles for…in

JScript proporciona un tipo de bucle especial para
examinar una a una todas las propiedades de un objeto. El
contador del bucle en un bucle for…in itera por todos
los índices de la matriz. El contador es una cadena, no un
número.

for (j in pastaVerde) // pastaVerde es un objeto con
varias propiedades

{

// Varias instrucciones de código
JScript.

}

Usar bucles while

El bucle while es muy parecido a un bucle
for. La diferencia es que un bucle while no tiene
incorporada una variable de contador o una expresión de
actualización. Si ya tiene alguna condición que
cambia y que se refleja en el valor asignado a una variable y
desea usarla para controlar la ejecución repetitiva de una
instrucción o un bloque de instrucciones, utilice un bucle
while.

var losMomentos = "";

var laCuenta = 42; // Inicia la variable de
contador.

while (laCuenta >= 1) {

if (laCuenta > 1) {

losMomentos = "Sólo quedan " + laCuenta + "
momentos.";

}

else {

losMomentos = "Sólo queda un
momento.";

}

laCuenta–; // Actualiza la variable de
contador.

}

losMomentos = "Terminó";

Nota  Debido a que los bucles
while no tienen variables de contador
explícitas incorporadas, todavía son
más vulnerables a crear bucles infinitos que otros
tipos de bucles. Además, en parte porque no es
necesariamente fácil de descubrir dónde y
cuándo se actualiza la condición del bucle,
sólo es muy fácil escribir un bucle
while en el que la condición nunca se
actualice. Debe tener mucha precaución al
diseñar bucles while.

 

Usar instrucciones break y continue

Microsoft JScript proporciona una instrucción
para detener la ejecución de un bucle. La
instrucción break se
puede usar para detener la ejecución si se cumple alguna
condición (que se supone una condición especial).
La instrucción continue
se puede usar para pasar inmediatamente a la siguiente
iteración, saltando el resto del bloque de código
pero actualizando la variable de contador como sucede si el bucle
es un bucle for o for…in.

var elComentario = "";

var elResto = 0;

var laSalida = 3;

var comprobar = 27;

for (kcuenta = 1; kcuenta <= 10;
kcuenta++)

{

elResto = comprobar % kcuenta;

if (elResto == laSalida)

{

break; // Sale del bucle al encontrar el primer resto
igual a salida.

}

elComentario = comprobar + " dividido por " + kcuenta +
" deja un resto igual a " + elResto;

}

for (kcuenta = 1; kcuenta <= 10;
kcuenta++)

{

elResto = comprobar % kcuenta;

if (elResto != laSalida)

{

continue; // Selecciona sólo los restos iguales a
la salida, ignorando todos los demás.

}

// Código de JScript que usa los restos
seleccionados.

}

var losMomentos = "";

var laCuenta = 42; // Se inicia el contador.

while (laCuenta >= 1) {

// if (laCuenta < 10) { // Advertencia

// Este uso de continue crea un bucle
infinito.

// continue;

// }

if (laCuenta > 1) {

losMomentos = "Sólo quedan " + laCuenta + "
momentos.";

}

else {

losMomentos = "Sólo queda un
momento.";

}

laCuenta–; // Se actualiza el contador.

}

laCuenta = "Terminó";

Funciones de
JScript

¿Qué es una
función?

Las funciones de Microsoft JScript realizan acciones.
También pueden devolver resultados. A veces son los
resultados de cálculos o comparaciones.

Las funciones combinan varias operaciones bajo
un único nombre. Esto le permite simplificar su
código. Puede escribir un conjunto de instrucciones,
asignarle un nombre y ejecutarlo en cualquier momento, tan solo
con llamarlo y pasarle la información que
necesite.

Para pasar información a una función hay
que encerrar la información entre paréntesis
después del nombre de la función. Los elementos de
información que se pasan a una función se llaman
argumentos o parámetros. Algunas funciones no utilizan
ningún argumento, otras sólo utilizan uno, otras
utilizan varios. Incluso existen algunas funciones para las que
el número de argumentos depende de cómo se utilice
la función.

JScript admite dos tipos de funciones: las que
están incorporadas en el lenguaje y
las creadas por el propio usuario.

Funciones especiales incorporadas

El lenguaje JScript incluye varias funciones
incorporadas. Algunas permiten controlar expresiones y caracteres
especiales, así como convertir cadenas en valores
numéricos.

Por ejemplo, escape()
y unescape() se utilizan
para convertir caracteres que tienen un significado especial en
el código HTML, caracteres
que no se pueden incluir directamente en el texto. Por
ejemplo, los símbolos de menor y mayor, "<" y ">",
delimitan las marcas
HTML.

La función escape toma como argumento
cualquiera de estos caracteres especiales y devuelve el
código de escape correspondiente. Cada código de
escape está compuesto por un signo de porcentaje (%)
seguido por un número de dos dígitos. La
función unescape es exactamente la inversa. Recibe
como argumento una cadena compuesta por un signo de porcentaje y
un número de dos dígitos y devuelve un
carácter.

Otra función incorporada que resulta útil
es eval(), que evalúa
cualquier expresión matemática
válida que se presente en forma de cadena. La
función eval() recibe un argumento: la
expresión a evaluar.

var unaExpresion = "6 * 9 % 7";

var total = eval(unaExpresion); // Asigna el valor 5 a
la variable total.

var otraExpresionMas = "6 * (9 % 7)";

total = eval(otraExpresionMas) // Asigna el valor 12 a
la variable total.

var totalidad = eval("…rodeado por hectáreas de
olivares."); // Genera un error.

Consulte la referencia del lenguaje para obtener
más información acerca de estas y otras funciones
incorporadas.

Crear sus propias funciones

Puede crear sus propias funciones y utilizarlas cuando
las necesite. La definición de una función
está formada por una instrucción function y un
bloque de instrucciones de JScript.

La función compruebaTripleta del siguiente
ejemplo usa como argumentos las longitudes de los lados de un
triángulo y calcula con ellas si el triángulo es
correcto comprobando si los tres números constituyen una
tripleta de Pitágoras. (El cuadrado de la longitud de la
hipotenusa de un triángulo es igual a la suma de los
cuadrados de los otros dos lados.) La función
compruebaTripleta llama a una función de entre otras dos
para realizar el cálculo
real.

Observe el uso de un número muy pequeño
("epsilon") como variable de prueba en la versión en coma
flotante de la comprobación. Debido a las incertidumbres y
a los errores de redondeo en los cálculos de coma
flotante, no resulta práctico realizar una prueba directa
de si el cuadrado de la hipotenusa es igual a la suma de los
cuadrados de los otros dos lados a menos que se sepa que los
valores en cuestión serán números enteros.
Como es más preciso realizar una prueba directa, el
código de este ejemplo determina si este método es
apropiado y, si lo es, lo utiliza.

var epsilon = 0.0000000000001; // Algún
número muy pequeño contra el cual se hace la
comprobación.

var tripleta = false;

function compruebaEnteros (a, b, c) { // La
función de comprobación para los
enteros.

if ( (a*a) == ((b*b) + (c*c)) ) { // La
comprobación.

tripleta = true;

}

} // Fin de la función de comprobación de
enteros.

function compruebaFlotante (a, b, c) { // La
función de comprobación para los números de
coma flotante.

var laPrueba= ((a*a) – ((b*b) + (c*c))) // Obtiene el
número de la prueba.

if (laPrueba< 0) { // La comprobación necesita
el valor absoluto, por lo que invierte laPrueba si su valor es
negativo.

laPrueba*= -1;

}

if (epsilon > laPrueba) { // Si son tan aproximados,
¡son muy aproximados!

tripleta = true;

}

} // Fin de la función de comprobación de
coma flotante.

function compruebaTripleta(a, b, c) { // La
comprobación. Primero pasa el lado mayor a la
posición "a".

var d = 0; // Crea un depósito
temporal.

if (c > b) { // Si c > b, los
intercambia.

d = c;

c = b;

b = d;

} // Si no, ignorarlos.

if (b > a) { // Si b > a, los
intercambia.

d = b;

b = a;

a = d;

} // Si no, ignorarlos.

// Ahora, el lado "a" es la hipotenusa, si es que hay
una.

if (((a%1) == 0) && ((b%1) == 0) &&
((c%1) == 0)) { // Comprueba los tres valores. ¿Son
enteros?

compruebaEnteros (a, b, c); // Si lo son se utiliza la
comprobación precisa.

}

else

compruebaFlotante (a, b, c); // Si no lo son se obtienen
los valores más próximos.

} // Fin de la función de comprobación de
la tripleta.

// Las tres próximas instrucciones asignan
valores de prueba para realizar una
comprobación.

var ladoA = 5;

var ladoB = 5;

var ladoC = Math.sqrt(50);

compruebaTripleta(ladoA, ladoB, ladoC); // Llama a la
función. Después de la llamada, tripleta contiene
el resultado.

Objetos de
JScript

¿Qué son los objetos?

En Microsoft JScript, los objetos son, esencialmente,
colecciones de propiedades y métodos.
Un método es una función que es miembro de un
objeto y una propiedad es
un valor o un conjunto de valores (en forma de matriz o de
objeto) que es miembro de un objeto. JScript admite tres tipos de
objetos: objetos intrínsecos, objetos creados por el
usuario, y objetos del explorador, de los que hablaremos en otra
sección.

Objetos como matrices

En JScript, los objetos y las matrices se manipulan de
forma idéntica. Puede hacer referencia a cualquiera de los
miembros de un objeto (sus propiedades y métodos) bien por
su nombre (usando el nombre del objeto, seguido por un punto y el
nombre de la propiedad) o bien por su subíndice en la
matriz. La numeración de los subíndices en JScript
comienza desde 0. Por comodidad, también se puede hacer
referencia al subíndice por su nombre.

Así, puede hacer referencia a una propiedad de
varias formas. Todas las instrucciones que aparecen a
continuación son equivalentes.

laAnchura= spaghetti.width;

laAnchura= spaghetti[3]; // [3] es el índice de
"anchura".

laAnchura = spaghetti["anchura"];

Aunque se pueden utilizar paréntesis para hacer
referencia a una propiedad por su índice numérico,
no es posible utilizar el punto (.) con los números de
índice. La siguiente instrucción genera un
error.

laAnchura= spaghetti.3;

Cuando un objeto tiene otro objeto como propiedad, la
convención de asignación de nombres se extiende de
forma sencilla.

var init4 = listaCompras.paraHoy [3].substring(0,1); //
listaCompras, una matriz, es una propiedad de paraHoy.

El hecho de que los objetos puedan tener otros objetos
como propiedades permite generar matrices con más de un
subíndice, que no sean directamente compatibles con el
lenguaje. El siguiente código crea una tabla de
multiplicación para los valores que van desde 0 veces 0
hasta 16 veces 16.

var tablaMult = new Array(17); // Crea el entorno que se
convertirá en la tabla.

for (var j = 0; j < tablaMult.length; j++) { // Se
prepara para rellenarla con filas.

var unaFila = new Array(17); // Crea una
fila.

for (var i = 0; i < unaFila.length; i++) { // Se
prepara para rellenar la fila.

unaFila [i] = (i + " veces " + j + " = " + i*j); // Crea
y coloca un valor.

}

tablaMult [j] = unaFila; // Coloca en la tabla la fila
ya completa.

}

Para hacer referencia a uno de los elementos de una
matriz de este tipo se utilizan varios conjuntos de
llaves.

var multiplica3x7 = tablaMult [3][7];

La siguiente instrucción genera un
error.

var multiplica3x7 = tablaMult [3, 7];

Palabras clave reservadas de
JScript

JScript tiene varias palabras clave reservadas. Estas
palabras pueden ser de tres tipos diferentes: Palabras clave
reservadas de JScript, palabras reservadas para el futuro y
palabras que se deben evitar.

Palabras clave de
JScript

break

False

in

this

void

continue

for

new

True

while

delete

function

null

typeof

with

else

if

return

var

Palabras clave futuras de
JScript

case

debugger

export

super

catch

default

extends

switch

class

do

finally

throw

const

enum

import

try

Las palabras que se deben evitar serán
cualesquiera que ya sean un nombre de un objeto o una
función intrínseca de JScript. Palabras como
String o parseInt se incluyen en esta
categoría.

Si utiliza cualquiera de las palabras clave de las dos
primeras categorías se produce un error de
compilación la primera vez que se carga la secuencia de
comandos. Si utiliza una de las palabras clave del tercer
grupo se
pueden producir problemas de
comportamiento
extraño si intenta utilizar, en la misma secuencia de
comandos, la variable y la entidad original que tiene el mismo
nombre. Por ejemplo, la siguiente secuencia de comandos en
realidad no hace lo que se supone que debería
hacer:

var String;

var texto = new String("Este es un objeto
String");

En este caso obtendrá un error indicando que
String no es un objeto. En muchas ocasiones, el uso de un
identificador ya existente no resulta tan obvio.

Recursividad

La recursividad es una técnica de programación importante. Se utiliza para
realizar una llamada a una función desde la misma
función. Como ejemplo útil se puede presentar el
cálculo de números factoriales. Los factoriales de
0 y 1 son, por definición, 1. Los factoriales de
números mayores se calculan multiplicando 1 * 2 * …,
incrementando el número de 1 en 1 hasta llegar al
número para el que se está calculando el
factorial.

El siguiente párrafo
muestra una función, definida en palabras, que calcula un
factorial.

"Si el número es menor que cero,
recházalo. Si no es un entero, redondéalo al
siguiente entero. Si el número es cero o uno, su factorial
es uno. Si el número es mayor que uno, multiplícalo
por el factorial del número menor inmediato."

Para calcular el factorial de cualquier número
mayor que 1 hay que calcular como mínimo el factorial de
otro número. La función que se utiliza para hacerlo
es la función en la que se encuentra en estos momentos,
esta función debe llamarse a sí misma para el
número menor inmediato, antes de poder
ejecutarse en el número actual. Esto es un ejemplo de
recursividad.

Claramente, aquí existe un modo de meterse en
problemas. Es fácil crear un función recursiva que
no llegue a devolver nunca un resultado definitivo y no pueda
llegar a un punto de finalización. Este tipo de
recursividad hace que el sistema ejecute
lo que se conoce como bucle "infinito". El siguiente es un
ejemplo: omita la primera regla (la de los números
negativos) de la descripción verbal del cálculo de un
factorial e intente calcular el factorial de un número
negativo. Se produce un fallo, ya que para poder calcular el
factorial de, por ejemplo, -24, primero hay que calcular el
factorial de -25, pero para hacerlo primero hay que calcular el
factorial de -26, y así sucesivamente. Obviamente, el
bucle nunca se detendrá.

Por tanto, es muy importante tener mucho cuidado al
diseñar las funciones recursivas. Si en alguna
ocasión sospecha que existe la posibilidad de que se
produzca un bucle infinito, puede hacer que la función
cuente el número de veces que se llama a sí misma.
Si la función se llama a sí misma demasiadas veces,
algo que deberá decidir usted, se detiene
automáticamente.

Aquí está de nuevo la función del
factorial, pero esta vez escrita en JScript.

function factorial(unNumero) {

unNumero = Math.floor(unNumero); // Si el número
no es un entero, lo redondea.

if (unNumero < 0) { // Si el número es menor
que cero, lo rechaza.

return " no se ha definido una cantidad ";

}

if ((unNumero == 0) || (unNumero == 1)) { // Si el
número es 0 o 1, su factorial es 1.

return 1;

}

else return (unNumero * factorial(unNumero – 1)); // De
lo contrario, la función recurre hasta
terminar.

}

Alcance de
variables

Microsoft JScript tiene dos alcances: global y local. Si
declara una variable fuera de una definición de una
función, será una variable global y tendrá
acceso a su valor y podrá modificarlo desde todo su
programa. Si declara una variable dentro de una definición
de una función, esa variable será local. Se crea y
se destruye cada vez que se ejecuta la función, no se
tiene acceso a ella desde fuera de la función.

Una variable local puede tener el mismo nombre que una
variable global, pero es totalmente distinta e independiente. En
consecuencia, si se modifica el valor de una variable no se
producirá efecto alguno sobre la otra. Dentro de la
función en la que se define la variable local sólo
tiene significado la versión local.

var unCentauro = "un caballo con jinete,"; //
Definición global de unCentauro.

// Código de JScript, omitido por razones de
brevedad.

function antiguedades() // En esta función se
define una variable local unCentauro.

{

// Código de JScript, omitido por razones de
brevedad.

var unCentauro = "Un centauro, probablemente será
un guerrero Escita a caballo";

// Código de JScript, omitido por razones de
brevedad.

unCentauro += ", mal informado; es decir, "; // Se
agrega a la variable local.

// Código de JScript, omitido por razones de
brevedad.

} // Fin de la función.

var nadaenparticular = antiguedades();

unCentauro += " tal y como es visto a cierta distancia
por una persona inocente.";

/*

Dentro de la función, la variable contiene "Un
centauro es probablemente un guerrero Escita a
caballo,

mal informado, es decir "; fuera de la función,
la variable contiene el resto de la frase:

"un caballo con jinete, tal y como es visto a cierta
distancia por una persona inocente."

*/

Es importante tener en cuenta que las variables
actúan como si estuvieran declarados al principio de
cualquier alcance en el que existan. Por este motivo en ocasiones
se producen resultados inesperados.

var unNumero = 100;

var conSuma = 0;

conSuma += unNumero; // conSuma ahora vale
100.

tweak();

conSuma += unNumero; // conSuma ahora vale
200.

function tweak() {

var nuevoElemento = 0; // Declaración
explícita de la variable nuevoElemento.

// La siguiente instrucción, si no estuviera
comentada, generaría un error.

// nuevoElemento = unNumero;

// La siguiente instrucción asigna el valor 42 a
la variable local unNumero, declarándola de forma
implícita.

unNumero = 42;

if (false) {

var unNumero; // Esta instrucción nunca se
ejecuta.

unNumero= "¡Hola!"; // Esta instrucción
nuca se ejecuta.

} // Fin de la condición.

} // Fin de la definición de la
función.

La instrucción que se incluye como comentario
intenta asignar el valor de la variable local unNumero a
la variable local nuevoElemento. Produce un error, a pesar
de que dentro de la función está definida una
variable local unNumero, por lo que existe en ella. La
variable unNumero no tiene ningún valor asignado
cuando esta instrucción aparece en el código, por
lo que su valor es no definido.

Copiar, pasar y
comparar datos

En Microsoft JScript, la forma como se controlan los
datos depende del tipo de datos.

Por valor o por referencia

Los valores numéricos o Boolean (true y
false) se copian, pasan y comparan por valor. Al
copiar o pasar por valor, se asigna un espacio en la memoria de
su equipo y se coloca el valor del original en ese espacio. Si
después cambia el original, la copia no se modifica (y
viceversa), porque son entidades separadas.

Los objetos, matrices y funciones se copian, pasan y
comparan por referencia bajo la mayoría de las
circunstancias. Al copiar o pasar por referencia,
básicamente crea un puntero al elemento original y
utilizar el puntero como si fuera una copia. Si cambia el
original, modifica el original y la copia (y viceversa). En
realidad, sólo hay una entidad; la "copia" realmente no es
una copia, es sólo otra referencia a los datos.

Nota  Puede cambiar este
comportamiento para objetos y matrices especificando el
método assign( )
para ellos.

 

Por último, las cadenas se copian y pasan por
referencia, pero se comparan por valor.

Nota  Debido a la forma como
están construidos los juegos
de caracteres ASCII
y ANSI, las letras mayúsculas preceden a las
letras minúsculas en orden de secuencia. Por
ejemplo, "Zoo" se compara como menor que
"alianza".

 

Pasar parámetros a funciones

Al pasar un parámetro a una función por
valor, está haciendo una copia separada del
parámetro, una copia que sólo existe dentro de la
función. Si, por otro lado, pasa un parámetro por
referencia y la función cambia el valor del
parámetro, se cambia en toda la secuencia de
comandos.

Verificar datos

Al realizar una verificación por valor, se
comparan dos elementos distintos para comprobar si son iguales.
Normalmente, esta comparación se realiza byte por byte. Al
verificar por referencia, está comprobando si dos
elementos son punteros un solo elemento original. Si es
así, entonces el resultado es que son iguales; si no,
aunque contengan los mismos valores exactos, byte por byte, el
resultado es que no son iguales.

Copiar y pasar cadena por referencia ahorra memoria; pero
como no puede cambiar cadenas una vez creadas, es posible
compararlas por valor. Esto le permite verificar si dos cadenas
tienen el mismo contenido aunque una se haya generado totalmente
aparte de la otra.

Usar
matrices

Indexación de matrices

Las matrices en JScript son sparse. Es decir, si
tiene una matriz con tres elementos, numerados 0, 1 y 2, puede
crear un elemento 50 sin preocuparse por los elementos que van
del 3 al 49. Si la matriz tiene una variable automática de
longitud (vea objetos intrínsecos para obtener una
explicación sobre el control automático de la
longitud de una matriz), la variable de longitud tendría
el valor 51, en lugar de 4. Se pueden crear matrices en las que
no existan espacios vacíos en el número de
elementos, pero no es necesario. De hecho, en JScript, no es
necesario que sus matrices tengan subíndices
numéricos.

En JScript, los objetos y las matrices son esencialmente
idénticos. La diferencia real no se encuentra en los
datos, si no en el método utilizado para hacer referencia
a los miembros de una matriz o a las propiedades y métodos
de un objeto.

Referencias a matrices

Existen dos métodos principales para hacer
referencia a los miembros de una matriz. Normalmente se hace
referencia a las matrices utilizando corchetes. Los
paréntesis encierran un valor numérico o una
expresión que se evalúa como un número
entero no negativo. El siguiente ejemplo asume que la variable
numEntr está definida y que se le ha asignado un
valor en alguna parte de la secuencia de comandos.

laLista = libretaDirecciones[numEntr];

laPrimeraLinea = laLista [1];

Este método de referencia equivale al
método utilizado para hacer referencia a objetos, aunque
en estos últimos debe aparecer después del punto el
nombre de una propiedad existente. Si esa propiedad no existe, el
código generará un error.

El segundo método para hacer referencia en una
matriz es crear un objeto o matriz que contenga las propiedades
numeradas y generar los números mediante un bucle. El
siguiente ejemplo genera dos matrices, una para el nombre y otra
para la dirección, a partir de la lista de
libroDirecciones. Cada una de ellas contiene cuatro
propiedades. Por ejemplo, una instancia de elNombre creada
a partir de las propiedades que van desde [Name1] a [Name4] en
laLista, podría contener "G." "Edward"
"Heatherington" "IV", o "George" "" "Sand" "".

laLista = libretaDirecciones[numEntr];

for (i = 1; i

< 4; i++) {

elNombre [i] = laLista["Nombre" + i];

laDireccion[i] = laLista["Direccion" + i];

}

Aunque esta instancia en concreto, es corta y se
podría haber escrito fácilmente en la
notación con punto (es decir, haciendo referencia a
laLista, elNombre, y laDireccion como objeto
en lugar de hacerlo como matrices), esto no siempre es posible.
Es posible que algunas veces una determinada propiedad no exista
hasta el momento de la ejecución, o que no exista forma de
saber con antelación cuál será. Por ejemplo,
si la matriz libretaDirecciones estuviera organizada por
el apellido en lugar de estarlo por una lista numérica, el
usuario probablemente podría introducir los nombres,
mientras se ejecuta la secuencia de comandos, para buscar a las
personas. El siguiente ejemplo asume la existencia de las
definiciones de función correctas en alguna parte de la
secuencia de comandos.

laLista = libretaDirecciones[getName()];

laListaIndiv= laLista [obtenerPrimerNombre
()];

Se trata de una referencia asociativa a la
matriz, es decir, la referencia se realiza mediante cadenas
totalmente arbitrarias. Los objetos en JScript son, en realidad,
matrices asociativas. Aunque se puede utilizar (y se utiliza con
frecuencia) el estilo de referencias con "puntos", no es
necesario hacerlo. Puesto que se puede tener acceso a los
miembros de cualquier objeto JScript utilizando la
notación de matriz, se puede utilizar un objeto JScript
como una matriz asociativa.

El código siguiente crea e inicializa la forma
más común de matriz:

var miMatriz = new Array("Atenas", "Belgrado",
"Cairo");

Se direcciona a cada elemento de esta matriz utilizando
su número de elemento; en este caso 0, 1 ó 2. Si se
utiliza la instrucción for…in, se puede iterar en
la matriz empezando en 0 y terminando en 2. Por
ejemplo:

for (clave in miMAtriz)

response.write("El valor del elemento es" +
MiMatriz[clave] + "<BR>);

El código siguiente crea e inicializa una matriz
asociativa que contiene tres elementos:

var MiMatriz = {"a" : "Atenas", "b" : "Belgrado", "c" :
"Cairo" };

En esta matriz, se direcciona a los elementos con las
cadenas clave("a", "b" o "c") en vez de un número de
elemento de matriz (0, 1 ó 2). Esto permite crear y
utilizar matrices con patrones de direccionamiento más
intuitivos. El mismo código de instrucción
for…in que se muestra arriba se puede utilizar para
iterar en esta matriz.

Partes: 1, 2, 3, 4, 5
 Página anterior Volver al principio del trabajoPágina siguiente 

Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.

Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

Categorias
Newsletter