您的位置:首页 > Web前端 > JavaScript

javaScript介绍与应用

2016-11-09 09:03 369 查看

1. JavaScript基础

1.1. 语法

1.1.1. 引入方式与引入位置

向HTML页面插入JavaScript的主要方法,就是使用<script元素>。使用<script>元素的方式有两种:直接在HTML页面中嵌入JavaScript代码和包含外部的JavaScript文件。

1. JS代码存放在标签对<script>...</script>中。

2. 使用script标签的src属性引入一个js文件。(方便后期维护,扩展)

例:<script src=”test.js” type=”text/javascript”></script>

注:规范中script标签中必须加入type属性。

 

内部

<html
>

<head>

<meta
http-equiv="Content-Type"
content="text/html; charset=utf-8" />

<title>在HTML中使用JavaScript</title>

</head>

<body>

<h1>在页面中嵌入JavaScript</h1>

<script
type="text/javascript">

window.document.write("hello,world");

</script>

</body>

</html>

 

外部

html文件

 

JavaScript文件

 

 

JavaScript代码

 

 

<script>标签的位置

关于<script>标签的位置,<script>应该放在页面的<head>元素中。

<html
>

<head>

<meta
http-equiv="Content-Type"
content="text/html; charset=utf-8" />

<title>在HTML中使用JavaScript</title>

<script
type="text/javascript" >

window.document.write("世界你好!!!");

</script>

</head>

<body>

<h1>将JavaScrip标签放在head上</h1>

</body>

</html>

 

注意:

1、 页面上可以有多个<script>标签

2、 <script>标签按顺序执行

3、 <script>标签可以出现在任意的页面位置

4、<script>标签一定要写</script>关闭,而不能<script/>这样关闭。否则没有任何错误信息,但是没有运行结果。

 

1.1.2. 区分大小写

与 Java 一样,变量、函数名、运算符以及其他一切东西都是区分大小写的。

比如:

变量 test 与变量
TEST 是不同的。

1.1.3. 注释

Java:      //    /*  */    /**  */

HTML:    <!--  -->

CSS:      /*   */

JavaScript:

ECMAScript注释与 Java语言的注释相同

ECMAScript 借用了这些语言的注释语法。

有两种类型的注释:

    单行注释以双斜杠开头(//)

    多行注释以单斜杠和星号开头(/*),以星号和单斜杠结尾(*/) 

1.2.  常用函数

window.alert() 或写为 alert()
:显示一个提示框显示内容。

window.document.write() :在网页的当前位置处写内容。

1.3.  变量

变量是弱类型的

与 Java不同,ECMAScript
中的变量无特定的类型,定义变量时只用 var
运算符,可以将它初始化为任意值。

因此,可以随时改变变量所存数据的类型(尽量避免这样做)。

例子

var color = "red";

var num = 25;

var visible = true;

 

ECMAScript 中的变量是用 var
运算符(variable
的缩写)加变量名定义的。例如:

 

var test = "hi";

 

在这个例子中,声明了变量 test,并把它的值初始化为
"hi"(字符串)。

 

每个变量仅仅是一个用于保存值的占位符而已。定义变量时要使用var操作符(var是关键字),后跟变量名

var message;

这行代码定义了一个名为message的变量,该变量可以用来保存任何值,也可以直接初始化变量。

var message ="hi";

ECMAScript 中的变量无特定的类型,定义变量时只用 var
运算符,可以将它初始化为任意值。

<script
type="text/javascript" >

//定义变量

var color
= "red";

var num
= 25;

var visible
= true;

</script>

 

同时,可以随时改变变量所存数据的类型(尽量避免这样做)。

<script
type="text/javascript" >

//定义变量

var message
= "hello";

message = 100;

alert(message);

</script>

该案例中变量message一开始保存了一个字符串值"hi"
然后又被一个数值100取代。这在ECMAScript是有效的,但是不建议这样使用。

使用细节:

1、 var关键字在定义变量的时候可以省略不写

2、 变量名可以重复,后面的将覆盖前面的变量

3、 变量的类型取决于值的类型

一条语句定义多个变量。

中间使用豆号隔开即可,可初始化,也可以不初始化。

<script
type="text/javascript" >

var name
= "jack",

age = 28,

gender = "男";

</script>

JavaScript代码块及其代码块变量作用域

<script
type="text/javascript" >

//代码块 (Java)对代码进行封装 隔离变量的作用域

{

var a
= 100;

document.write(a + "</br>");

} {

document.write(a + "</br>");

//JavaScript不会隔离变量作用域

}

 

</script>

 

1.4. 数据类型

1.4.1. typeof操作符

ECMASCRIPT 中有4种基本数据类型:

  Undefined, Boolean,Number和String

Typeof  

关键字typeof可以获取一个变量的类型。

<script
type="text/javascript" >

var a
= 100;

var b
= 3.14;

var c
= true;

var d
= 'a';

var e
= "hello";

var f;

document.write(a + "<br/>");

document.write(b + "<br/>");

document.write(c + "<br/>");

document.write(d + "<br/>");

document.write(e + "<br/>");

document.write(f + "<br/>");

document.write("<hr/>");

document.write( typeof a
+ "<br/>");

document.write( typeof b
+ "<br/>");

document.write( typeof c
+ "<br/>");

document.write( typeof d
+ "<br/>");

document.write( typeof e
+ "<br/>");

document.write( typeof f
+ "<br/>");

</script>

 

类型的总结:

所有的数值都是number类型

字符和字符串都是string类型

布尔是boolean类型

如果一个变量没有初始化值的时候,其类型为undefined类型。表示没有定义。

JavaScript中数值的表示形式:

<script
type="text/javascript" >

var a
= 12;

var b
= 012;
//八进制
10

var c
= 0x12;
//十六进制
18

document.write(a + "<br/>");

document.write(b + "<br/>");

document.write(c + "<br/>");

</script>

使用细节:

1、八进制中如果数据超过0~7,默认解析为十进制数据。

<script
type="text/javascript" >

var a=09;
//无效的八进制

document.write(a+"<br/>");

</script>

 

浮点数:

要定义浮点值,必须包括小数点和小数点后的一位数字(例如,用 1.0
而不是 1)。这被看作浮点数字面量。例如:

<script
type="text/javascript" >

var a
= 3.14;//浮点数

var b
= 1.//合法,小数点后面没有数字,解析为1

var c
= 10.0//整数,解析为10。

document.write(a + "<br/>");

document.write(b + "<br/>");

document.write(c + "<br/>");

</script>

由于保存浮点数需要的内存空间是保存正数值的两倍,因此ECMAScrip会将浮点数值转换为整数值。如果小数点后没有跟任何数字和浮点数本身就是一个整数就会被转换为整数。

 

转换成数字

ECMAScript 提供了两种把非数字的原始值转换成数字的方法,即 parseInt()
和 parseFloat()。只有对
String 类型调用这些方法,它们才能正确运行;对其他类型返回的都是
NaN。

在判断字符串是否是数字值前,parseInt()
和 parseFloat() 都会仔细分析该字符串。

parseInt() 方法首先查看位置 0
处的字符,判断它是否是个有效数字;如果不是,该方法将返回 NaN,不再继续执行其他操作。但如果该字符是有效数字,该方法将查看位置
1 处的字符,进行同样的测试。这一过程将持续到发现非有效数字的字符为止,此时
parseInt() 将把该字符之前的字符串转换成数字。

例如,如果要把字符串 "12345red"
转换成整数,那么 parseInt() 将返回
12345,因为当它检查到字符
r 时,就会停止检测过程。

<script
type="text/javascript" >

var num
= parseInt("1234abc");

document.write(num); //1234

</script>

 

字符串中包含的数字字面量会被正确转换为数字,比如 "0xA"
会被正确转换为数字 10。不过,字符串
"22.5" 将被转换成
22,因为对于整数来说,小数点是无效字符。

<script
type="text/javascript" >

var num1
= parseInt("12345red");

//返回 12345

var num2
= parseInt("0xA");

//返回 10

var num3
= parseInt("56.9");

//返回 56

var num4
= parseInt("red");

//返回 NaN

document.write(num1 + "<br/>");

document.write(num2 + "<br/>");

document.write(num3 + "<br/>");

document.write(num4 + "<br/>");

</script>

 

<script
type="text/javascript" >

alert(  parseFloat("123")  );
// 可以

alert(  parseFloat("123.53")  );
// 可以

alert(  parseFloat("012")  );
// 12

alert(  parseFloat("000012")  );  //
12

alert(  parseFloat("0x20")  );
// 结果为0

alert(  parseFloat("-59")  );
// 负数

alert(  parseFloat("abc123")  );
// NaN (Not a Number),表示不是一个数字。

alert(  parseFloat("123ab2c")  );
// 结果是123,即会解析前面正确的数字,直到遇到不正确的数字。

</script>

判断是否是一个有效的数值.

isNaN

isNaN( 表达式 ),返回的结果是否为NaN(非数值)

<script
type="text/javascript" >

document.write(isNaN("abc")+"<br/>"); //true

document.write(isNaN("123")+"<br/>"); //false

</script>

1.5. 运算符(operator)

1.5.1. 算术

加法运算符

 

加法运算符由加号(+)表示:

ECMAScript 中的加法也有一些特殊行为:

    某个运算数是 NaN,那么结果为
NaN。

字符串拼接

    如果两个运算数都是字符串,把第二个字符串连接到第一个上。

    如果只有一个运算数是字符串,把另一个运算数转换成字符串,结果是两个字符串连接成的字符串。

 

例如:

 

var result = 5 + 5; //两个数字

alert(result); //输出 "10"

var result2 = 5 + "5"; //一个数字和一个字符串

alert(result); //输出 "55"

注意:

var a
= 5;

var b
= true;

alert(a + b);

//6

 

注意:变量是布尔类型的时候,true=1, false=0;

var a
= 5;

var b
= false;

alert(a + b);//5

 

乘法运算符

 

乘法运算符由星号(*)表示,用于两数相乘。

 

ECMAScript 中的乘法语法与 Java语言中的相同:

注释:如果运算数是数字,那么执行常规的乘法运算,即两个正数或两个负数为正数,两个运算数符号不同,结果为负数。

 

除法运算符

除法运算符由斜杠(/)表示,用第二个运算数除第一个运算数:

var iResult = 88 /11;

注意:

var a
= 10;

var b
= 3;

alert(a / b); //3.3333333333333335

 

 

1.5.2. 比较

比较运算符小于、大于、小于等于和大于等于执行的是两个数的比较运算

var bResult1 = 2 > 1 //true

var bResult2 = 2 < 1 //false

 

比较数字和字符串

var bResult = "25" < "3";

alert(bResult); //输出 "true"

上面这段代码比较的是字符串 "25"
和 "3"。两个字符串在比较的时候
比较的是两个字符串 对应的字符顺序.

注意:
如果字符串与比较,会把字符串转成数字再进行比较。

如果把某个运算数改为数字,那么结果就不一样了:

var bResult = "25" < 3;

alert(bResult); //输出 "false"

 

这里,字符串 "25"
将被转换成数字 25,然后与数字
3 进行比较,结果不出所料。

 

无论何时比较一个数字和一个字符串,ECMAScript
都会把字符串转换成数字,然后按照数字顺序比较它们。

 

1.5.3. 逻辑运算符

&& 与

||    或

!    非

逻辑 AND 运算符

在 ECMAScript
中,逻辑 AND 运算符用双和号(&&)表示:

var bTrue = true;

var bFalse = false;

var bResult = bTrue && bFalse;

与 Java 中的逻辑
AND 运算相似,ECMAScript
中的逻辑 AND
运算也是简便运算,即如果第一个运算数决定了结果,就不再计算第二个运算数。对于逻辑
AND 运算来说,如果第一个运算数是
false,那么无论第二个运算数的值是什么,结果都不可能等于
true。

考虑下面的例子:

var bTrue = true;

var bResult = (bTrue && bUnknown); //发生错误

alert(bResult); //这一行不会执行

这段代码在进行逻辑 AND 运算时将引发错误,因为变量
bUnknown 是未定义的。变量
bTrue 的值为
true,因为逻辑
AND 运算将继续计算变量
bUnknown。这样做就会引发错误,因为
bUnknown 的值是
undefined,不能用于逻辑
AND 运算。

 

逻辑 OR 运算符

ECMAScript 中的逻辑 OR
运算符与 Java
中的相同,都由双竖线(||)表示

var bTrue = true;

var bFalse = false;

var bResult = bTrue || bFalse;

下面的真值表描述了逻辑 OR 运算符的行为:

运算数 1
运算数 2
结果
true

true

true

true

false

true

false

true

true

false

false

false

 

 

 

与逻辑 AND 运算符一样,逻辑
OR 运算也是简便运算。对于逻辑
OR 运算符来说,如果第一个运算数值为
true,就不再计算第二个运算数。

 

逻辑 运算符NOT。

在 ECMAScript
中,逻辑 NOT 运算符与Java
中的逻辑 NOT
运算符相同,都由感叹号(!)表示。

通常,该运算符用于控制循环:

var bFound = false;

var i = 0;

 

while (!bFound) {

  if (aValue[i] == vSearchValues) {

    bFound = true;

  } else {

    i++;

  }

}

 

 

1.5.4. 赋值运算符

简单的赋值运算符由等号(=)实现,只是把等号右边的值赋予等号左边的变量。

 

例如:

 

var iNum = 10;

 

复合赋值运算是由乘性运算符、加性运算符或位移运算符加等号(=)实现的。这些赋值运算符是下列这些常见情况的缩写形式:

 

var iNum = 10;

iNum = iNum + 10;

 

可以用一个复合赋值运算符改写第二行代码:

 

var iNum = 10;

iNum += 10;

 

每种主要的算术运算以及其他几个运算都有复合赋值运算符:

 

    乘法/赋值(*=)

    除法/赋值(/=)

    取模/赋值(%=)

    加法/赋值(+=)

    减法/赋值(-=)

1.5.5. 三目

运算符是 ECMAScript
中功能最多的运算符,它的形式与 Java 中的相同。

 

variable = boolean_expression ? true_value : false_value;

 

该表达式主要是根据 boolean_expression
的计算结果有条件地为变量赋值。如果 Boolean_expression
为 true,就把
true_value 赋给变量;如果它是
false,就把
false_value 赋给变量。

 

例如:

 

var iMax = (iNum1 > iNum2) ? iNum1 : iNum2;

 

在这里例子中,iMax 将被赋予数字中的最大值。表达式声明如果
iNum1 大于
iNum2,则把
iNum1 赋予
iMax。但如果表达式为
false(即
iNum2 大于或等于
iNum1),则把
iNum2 赋予
iMax。

1.6.  流程控制语句

1.6.1. 判断

判断语句

if 语句的语法:

 

if (condition) statement1 else statement2

 

 

如果条件计算结果为 true,则执行
statement1;如果条件计算结果为
false,则执行
statement2。

注意:    

判断的条件会发生自动类型转换:

    number:如果非0为true,0为false

    string:如果非null或非空为true,否则为false

    undefined:false

    NaN:    false

    对象类型:非null为true,否则为false。

 

1.6.2. 选择

switch 语句的语法:

 

switch (expression)

  case value: statement;

    break;

  case value: statement;

    break;

  case value: statement;

    break;

  case value: statement;

    break;

...

  case value: statement;

    break;

  default: statement;

 

每个情况(case)都是表示“如果
expression 等于
value,就执行
statement”。

 

关键字 break 会使代码跳出
switch 语句。如果没有关键字
break,代码执行就会继续进入下一个
case。

 

关键字 default 说明了表达式的结果不等于任何一种情况时的操作(事实上,它相对于
else 从句)。

 

ECMAScript 和 Java
中的 switch
语句

 

ECMAScript 和 Java
中的 switch
语句有两点不同。在 ECMAScript
中,switch
语句可以用于字符串,而且能用不是常量的值说明情况:

1、基本数据类型都可以传递给switch case语句。

2、case语句可以是表达式

 

function
test6() {

var color
= "xx";

var value1
= "red", value2
= "green";

switch(color) {

case value1:

alert("红色");

break;

case value2:

alert("绿色");

break;

default:

alert("执行默认default");

}

}

 

这里,switch 语句用于字符串
sColor,声明
case 使用的是变量
BLUE、RED
和 GREEN,这在
ECMAScript 中是完全有效的。

练习:

switch中传递boolean类型值?

var num = 20;

switch(true) {

case num >= 0 && num <= 10:

alert("大于0小于等于10");

break;

case num>10&&num<=20:

alert("大于10小于等于20");

break;

}

 

 

1.6.3. 循环

 

while 语句

 

while 语句是先测试循环。这意味着退出条件是在执行循环内部的代码之前计算的。因此,循环主体可能根本不被执行。

 

它的语法如下:

 

while (expression) statement

 

例子:

 

var i = 0;

while (i < 10) {

  i += 2;

}

 

 

do-while 语句

 

do-while 语句是后测试循环,即退出条件在执行循环内部的代码之后计算。这意味着在计算表达式之前,至少会执行循环主体一次。

 

它的语法如下:

 

do {statement} while (expression);

 

例子:

 

var i = 0;

do {i += 2;} while (i < 10);

 

 

for 语句

 

for 语句是前测试循环,而且在进入循环之前,能够初始化变量,并定义循环后要执行的代码。

 

它的语法如下:

 

for (initialization; expression; post-loop-expression) statement

 

注意:post-loop-expression
之后不能写分号,否则无法运行。

 

例子:

 

iCount = 6;

for (var i = 0; i < iCount; i++) {

  alert(i);

}

 

这段代码定义了初始值为 0
的变量 i。只有当条件表达式(i < iCount)的值为
true 时,才进入
for 循环,这样循环主体可能不被执行。如果执行了循环主体,那么将执行循环后表达式,并迭代变量
i。

for循环中不会有局部变量,都是全局的变量。

 

1.6.4. for in语句

for 语句是严格的迭代语句,用于枚举对象的属性或者遍历一个数组的元素。

它的语法如下:

for (property in expression) statement

例子:

for (sProp in window) {

  alert(sProp);

}

这里,for-in 语句用于显示
window 对象的所有属性。

1.6.5. With语句

wth语句的作用: 有了 With
语句,在存取对象属性和方法时就不用重复指定参考对象。

格式 :

with(obj){

操作obj的属性语句;

}

<script type="text/javascript">

        <!—

            with(document){

              write("您好 !");

              write("<br>这个文档的标题是 : \"" + title + "\".");

              write("<br>这个文档的 URL
是: " + URL);

              write("<br>现在您不用每次都写出 document
对象的前缀了 !");

           }

        // -->

</script>

 

1.6.6. 练习

1,显示“*”为正方形,5行5列。

2,显示“*”为三角型,5行,第1行有1个“*”,第2行有2个“*”……

3,显示乘法口诀。

1*1=1

1*2=2 2*2=4

....

1*9=9 2*9=18 ...

1.7. JavaScript函数基础

函数主要用来封装具体的功能代码。

函数是由这样的方式进行声明的:关键字 function、函数名、一组参数,以及置于括号中的待执行代码。 

 

注意:函数的形参是不用声明使用的。

 

函数的基本语法是这样的:

 

function functionName(arg0, arg1, ... argN) {

  statements

}

 

例如:

 

function sayHi(sName, sMessage) {

  alert("Hello " + sName + sMessage);

}

调用函数?

 

函数可以通过其名字加上括号中的参数进行调用,如果有多个参数。

 

如果您想调用上例中的那个函数,可以使用如下的代码:

 

sayHi("David", " Nice to meet you!")

 

调用上面的函数 sayHi()
会生成一个警告窗口。

 

函数的返回值

 

没有返回值类型,如果一个函数需要返回值直接使用return即可.

该函数只需要使用 return
运算符后跟要返回的值即可。

 

function sum(iNum1, iNum2) {

  return iNum1 + iNum2;

}

注释:如果函数无明确的返回值,或调用了没有参数的 return
语句,那么它真正返回的值是 undefined。

-----------------------------------------------------------------

函数格式

Function 函数名(参数列表){

代码;

return 返回值; //return
不是必须的.

}

示例:

function foo() {

alert("test");

}

function foo2( a ){

alert(a);

return; // 没有返回值,表示方法执行完了,后面如果有代码就不会执行了

}

function foo3( a, b ){

alert(a + b);

}

function foo4( a, b ){

return a + b;

}

注意事项:

1.不需要类型,只写形参的名称就可以了。

2声明时不需要指定返回值类型;return可以有,也可以没有。

2.   javascript中的函数没有重载的形式,后定义的函数会直接覆盖前面 的函数。

3.  一个函数可以接收任意个
参数。

 

参数:

JS的函数都是类似于Java中可变参数的。

在函数中可以直接使用arguments变量,arguments是一个数组,表示所有传递过来的参数。

在声明函数时,定义的形参就对应arguments数组中相应位置的参数值,写形参只是用着方便一点。

参数示例

定义:

function foo( a, b, c ){

...

}

调用:

foo()

foo( 1, 2 )

foo( 1, 2, 3 )

foo( 1, 3, 5, 7, 9 )

foo( "aa", null, "cc" )

没有重载

当同一个名称的函数定义多次时,最终使用的是最后一个的定义。没有重载!

例:

function sum(){ alert("11"); }

function sum(a,b){ alert("22"); }*

调用时写sum(1,2),结果还是显示“22”。

总结:

特点:

       1、使用function关键字定义函数。

       2、没有任何的返回值类型。

       3、函数的定义优先执行,与顺序无关。

       4、可以通过函数名赋值函数,函数变量的类型是function对象。

       5、参数列表不能有var关键字。

       6、函数的参数列表在具体调用的时候实参个数可以和形参个数不同。

       7、JavaScript函数天然的支持可变参数。

       8、同名的函数最后声明会覆盖前面以声明。Javascript中没有函数重载。

案例:体验JavaScript

定义一个输入框输入的月份,然后输出本月对应的天数。

<html>

<head>

<title>学习JavaScript</title>

</head>

<body>

月份:

<input type="text" id="month">

<input type="button" value="显示天数" onclick="foo()">

<!--

31天:1,3,5,7,8,10,12

30天:4,6,9,11

28天:2

-->

<script type="text/javascript">

function foo(){

var monthValue = document.getElementById("month").value;

// 如果是非数字,则不再继续执行

if( isNaN(monthValue) ){

alert("请输入正确的月份!");

return;

}

// 转为数字

monthValue = parseInt(monthValue);

// 判断范围

if( monthValue < 1 || monthValue > 12){

alert("请输入正确的月份(1--12)!");

return;

}

// 根据月份显示天数

switch(monthValue){ // 这时不会自动转换类型,所以先转型

case 2:

alert("28天");

break;

case 4:

case 6:

case 9:

case 11:

alert("30天");

break;

default:

alert("31天");

break;

}

}

</script>

</body>

</html>

 

4. 面向对象

JavaScript面向对象的脚本语言,此时开发者在开发的时候需要找对象,默认提供了内置的对象。也可以根据开发者的需求自己定义对象。

 

4.1. 基本数据类型包装类

为了便于操作基本类型值,ECMAScript
提供了3个特殊的引用类型:Boolean,Number,String。它们是引用类型。当读取基本数据类型时,后台就会创建一个对应的基本包装类对象,所以我们在操作基本数据类型时,可以直接调用一些方法。

 

4.1.1. String

 

//通过构造函数创建String
对象

var b
= new String("java");

var c
= new String("java");

document.write(b + "," +
c);

document.write(b == c);

//false

//比较字符串的值是否相等

document.write(b.valueOf() == c.valueOf());

 

//属性

var a
= "helloworld";

document.write(a.length);

 

常见的方法:

Anchor() 生产锚点

Blink()   为元素添加blink标签

charAt()    返回指定索引位置处的字符。

charCodeAt() 回一个整数,代表指定位置上字符的 Unicode
编码。

Concat()    回字符串值,该值包含了两个或更多个提供的字符串的连接。

Fontcolor()  把带有 COLOR
属性的一个 HTML <FONT> 标记放置在
String 对象中的文本两端

indexOf()    返回 String
对象内第一次出现子字符串的字符位置

italics()    把 HTML <I>
标记放置在 String 对象中的文本两端。 

Link()         把一个有 HREF
属性的 HTML 锚点放置在
String 对象中的文本两端。

Replace()      返回根据正则表达式进行文字替换后的字符串的复制

Split()        切割   

Substr()       截取子串

toUpperCase()  转大写

toLowerCase    转小写

//方法

document.write("第五章".anchor("ch1"));

document.write("第五章".blink());

// 返回在指定位置的字符。

document.write("第五章".charAt(0));

document.write("a".charCodeAt(0));

document.write("第五章".concat("abc"));

document.write("第五章".fontcolor("#ff0000"));

document.write("第五章".indexOf("五"));

document.write("第五章".italics());

document.write("第五章".link());

document.write("helloworld".replace(/l/g,
"L"));

document.write("<br/>");

var names
= "jack-lili-lucy".split("-");

for (var
temp in names) {

document.write(names[temp] + "<br/>");

}

document.write("<br/>");

document.write("helloworld".substr(1,
2));
//el

document.write("helloworld".substring(1,
2));//e

document.write("helloworld".toUpperCase());

document.write(new String("java").toString()
== new String("java").toString());

 

4.1.2. Number

构造函数

//创建number对象

var a
= 12;

var b
= new Number(12);

document.write(a + ":" +
b);

//比较数值true

document.write(a == b);

//没有转型false

document.write(a === b);

//false

document.write(new Number(12)
== new Number(12));

//false

document.write(new Number(12)
=== new Number(12));

// false

document.write(new Number(12).valueOf()
== new Number(12).valueOf());

//true

document.write(new Number(12).valueOf()
=== new Number(12).valueOf());

 

属性:

document.write("最大值" +
Number.MAX_VALUE + "</br>");

document.write("最小值" +
Number.MIN_VALUE + "</br>");

 

方法

//方法

document.write(new Number(12).toString(10)
+ "<br/>");

document.write(new Number(12).toString(2)
+ "<br/>");

document.write(new Number(12).toString(8)
+ "<br/>");

document.write(new Number(12).toString(16)
+ "<br/>");

document.write(new Number(12.12345)
+ "<br/>");

document.write(new Number(12.12345).toFixed()
+ "<br/>");

document.write(new Number(12.12345).toFixed(2)
+ "<br/>");

document.write(new Number(12.12345).toFixed(3)
+ "<br/>");

备注:toFixed()是指定小数位数。

4.1.3. Boolean

var a
= new Boolean(false);

document.write(a.constructor + "<br/>");

document.write(a.toString() + "<br/>");

document.write(a.valueOf() + "<br/>");

if (a.valueOf()) {

document.write("条件成立<br/>");

} else {

document.write("条件不成立<br/>");

}

 

使用细节:

构造函数中可以传递任意值,实参在内部会进行自动类型转换,转为true或者false

4.2. Math类

Math工具类中的方法

max()

min()

random()

...更多请看文档

document.write(Math.ceil(12.34)
+ "<br/>");

//13

document.write(Math.floor(12.34)
+ "<br/>");

//12

document.write(Math.round(12.54)
+ "<br/>");

//13

document.write(Math.round(12.35)
+ "<br/>");

//12

document.write(Math.random() + "<br/>");

//0~1

document.write(Math.max(12,
100, -1,
200, 320,
500) +
"</br>");

document.write(Math.min(12,
100, -1,
200, 320,
500) +
"</br>");

 

4.3. Date对象

查看文档

改变网页标题的方式

每一秒执行一次方法

练习: 标题栏显示时间,每一秒变化一次,
格式为: xxxx年xx月xx日
xx:xx:xx

提示:需要使用

setInterval(代码,
毫秒数)
每经过指定毫秒值后执行指定的代码。

setTimeout(代码,
毫秒数)  经过指定毫秒值后执行指定的代码(只执行一次)。

其中一个方法

查看文档学习Date的其他方法

function showDate()
{

//获取系统时间

var date
= new Date();

//获取年 月 日时分秒

var str
= date.getFullYear() + "年" +
(date.getMonth() + 1)
+ "月" +
date.getDate() + "日" +
"星期" +
date.getDay() + " " +
date.getHours() + "时" +
date.getMinutes() + "分" +
date.getMinutes() + "分" +
date.getSeconds() + "秒"

//将格式化好的时间显示在叶面的span标签体中

var span
= document.getElementById("mydate");

//给span标签设置标签体内容

span.innerHTML = str.fontcolor("red");

//调用定时函数

window.setTimeout("showDate()",
1000);

}

 

//调用函数

showDate();

 

 

 

4.4. 数组

数组定义:

创建数组的基本方式有2种.

第一种是使用Array的构造函数

不指定长度

var arrs=new Array();

如果确定知道数组保存的数量,可以通过构造函数传递数组的长度

指定长度

var arrs=new Array(20);

该数组有20个元素,每一项的默认值都是undefined

指定元素

var arrs=new Array("hello"); 会创建一个元素的数组.

第二种方式

指定元素

创建一个包含3个字符串的数组

var arrs=["aa","bb","cc"];

创建一个空数组

var arrs=[];

var values=[1,2];

数组初始化

var arrs=["aa","bb","cc"];

color[2]="xx";//修改第3项

color[3]="zz";//新增第4项

数组遍历:

for(var i = 0; i < arr.length; i++){

alert(arr[i]);

}



for( var i in arr ){

// i 是遍历出的数组中的索引,从0开始,一直到最大索引。

// 如果有其他属性,也会遍历出来,其实索引就是数组对象的属性。

alert(arr[i]);

}

注意:

JS数组可以动态增长:

//数组的声明和初始化,注意:数组的长度取决于整数下标的个数

var arr
= new Array();

arr[0]
= "aa";2

arr[1]
= "bb";

arr[6]
= 'xx';

document.write(arr + "<br/>");

//遍历数组

for (var
i = 0;
i < arr.length;
i++) {

document.write(arr[i]+"<br/>");

}

//下标越界时:

var arr
= ["aa",
"bb"];

document.write(arr[200]);

// 显示undefined

 

 

常见方法

Array中的方法:

sort()

对当前数组进行排序,并返回已经进行了排序的此Array对象。

不会创建新对象,是在指定数组中直接进行排序。

reverse()

对当前数组进行反转排序,返回一个元素顺序被反转的 Array
对象。

不会创建新对象,是在指定数组中直接进行排序。

 

push( [item1 [item2 [. . . [itemN ]]]] )

将以新元素出现的顺序添加这些元素。

如果参数之一为数组,那么该数组将作为单个元素添加到数组中。

pop()

移除数组中的最后一个元素并返回该元素。

如果该数组为空,那么将返回 undefined。

shift()

移除数组中的第一个元素并返回该元素。

如果该数组为空,那么将返回 undefined。

unshift([item1[, item2 [, . . . [, itemN]]]])

将指定的元素插入数组开始位置并返回该数组。

 

splice(start, deleteCount, [item1[, item2[, . . . [,itemN]]]])

移除从 start 位置开始的指定个数的元素,并插入新元素,从而修改
concat([item1[, item2[, . . . [, itemN]]]])

返回一个新数组,这个新数组是由两个或更多数组组合而成的。原数组不变。

要加的项目(item1 … itemN)会按照从左到右的顺序添加到数组。

如果某一项为数组,那么添加其内容到 array1
的末尾。

如果该项目不是数组,就将其作为单个的数组元素添加到数组的末尾。

slice(start, [end])

返回一个包含了指定的部分元素的数组。

将返回索引大于等于start且小于end的一段。

原数组不变。

join(separator)

把所有元素由指定的分隔符分隔开来组成一个字符串,返回这个字符串值。

如果数组中有元素没有定义或者为 null,将其作为空字符串处理。

var a
= [1,
2, 3];

// 连接两个或更多的数组,并返回结果。

document.write(a.concat([100,
30]) + "<br/>");

document.write(a.concat([100,
30], [60,
90]) + "<br/>");

// 把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。

var b
= a.join("$");

document.write(b + "<br/>");

document.write( typeof b
+ "<br/>");

//string

// 删除并返回数组的最后一个元素

document.write(a.pop() + "<br/>");

// 向数组的末尾添加一个或更多元素,并返回新的长度。

document.write(a.push(99,
78) + "<br/>");

// 把数组转换为字符串,并返回结果。

document.write(a.toString() + "<br/>");

// 返回数组对象的原始值

var c
= a.valueOf();

document.write( typeof c
+ "<br/>");

 

排序:

var a
= [100,
9, 20,
3, 7,
96];

document.write(a + "<br/>");

//如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序

a.sort();

document.write(a + "<br/>");

//指定比较方式

a.sort(compareTo);

document.write(a + "<br/>");

function compareTo(a, b)
{

return a
- b;

}

 

 

4.5. 自定义对象

4.5.1. 无参构造函数

 

/*

 * 自定义对象

 *

 *  */

function Person()
{

window.document.write("constructor()<br>");

}

 

var person
= new Person();

//定义属性

person.name = "jack";

person.age = 23;

//定义方法

person.work =
function() {

window.document.write("person working...<br/>");

};

//获取构造函数

window.document.write(person.constructor +
"<br/>");

 

window.document.write(person.name + "," +
person.age + "<br/>");

person.work();

 

 

4.5.2. 有参数构造函数

function Person(name, age)
{

this.name = name;

this.age = age;

this.work =
function() {

alert(this.name + ":" +
this.age);

}

}

 

var person
= new Person("jack",
28);

person.work();

 

 

 

4.5.3. Object方式

/*

 * 自定义对象Object方式

 *

 *  */

var person
= new Object();

person.name = "jack";

person.age = 28;

person.sayHello =
function() {

document.write(this.name + ":" +
this.age);

}

person.sayHello();

 

 

该例子创建了一个名为person的对象,并添加了2个属性(name
age)和一个方法(sayHello)

 

使用构造函数模式方式创建对象:

先自定义类,其实就是定义一个和类名相同的函数。

再使用new关键字调用定义好的类。

(任何函数,只要通过new操作符来调用,那它就可以作为构造函数)

  

说明:

要将属性与方法赋给this,这样才是表示是对象的属性,如果写var str则是方法中的局部变量。

不要写new Object()。

不要写return语句。

 

JS在new Person()会做如下事:

1,创建一个新对象。

2,this指向新对象。

3,执行构造方法中的代码。

4,返回新对象。

字面量方式创建对象:

var person={

name:"李四",

age:88,

eat:function(){

alert("eating...");

}

};

alert(person.name+person.age);

person.eat();

4.6. prototype

 “prototype”字面翻译是“原型”,是javascript实现继承的主要手段。粗略来说就是:prototype是javascript中的函数(function)的一个保留属性,并且它的值是一个对象(我们可以称这个对象为"prototype对象")。

Prototype注意的细节:

prototype是函数(function)的一个必备属性(书面一点的说法是"保留属性")(只要是function,就一定有一个prototype属性)

prototype的值是一个对象

可以任意修改函数的prototype属性的值。

一个对象会自动拥有这个对象的构造函数的prototype的成员属性和方法。

 

 

 

需求:

1. 自定义一个数组的工具类。

function arrTool(){}

var ArrayTool  = new arrTool();

ArrayTool.getMax = function(arr)

{

var max = 0;

for(var x=1; x<arr.length; x++)

{

if(arr[x]>arr[max])

max = x;

}

return arr[max];

};

ArrayTool.getMin = function(arr)

{

var min = arr[0];

for(var x=1; x<arr.length; x++)

{

if(arr[x]<min)

min = arr[x];

}

return min;

}

/*

ArrayTool.getMax = getMax;

//获取最值。

function getMax(arr)

{

var max = 0;

for(var x=1; x<arr.length; x++)

{

if(arr[x]>arr[max])

max = x;

}

return arr[max];

}

*/

ArrayTool.binarySearch = function(arr,key)

{

var min,max,mid;

min = 0;

max = arr.length-1;

while(min<=max)

{

mid  = (min+max)>>1;

if(key>arr[mid])

min = mid + 1;

else if(key<arr[mid])

max = mid - 1;

else

return mid;

}

return -1;

}

/*

ArrayTool.binarySearch = halfSearch;

//折半查找,必须是对有序的数组。

function halfSearch(arr,key)

{

var min,max,mid;

min = 0;

max = arr.length-1;

while(min<=max)

{

mid  = (min+max)>>1;

if(key>arr[mid])

min = mid + 1;

else if(key<arr[mid])

max = mid - 1;

else

return mid;

}

return -1;

}

2. 把数组的工具方法添加到javascript内置对象Array中。

 

Array.prototype.getIndex = function(element)

{

for(var x=0; x<this.length; x++)

{

if(this[x]==element)

return x;

}

return -1;

}

Array.prototype.getMin = function()

{

var min = this[0];

for(var x=1; x<this.length;x++)

{

if(this[x]<min)

min = this[x];

}

return min;

}

3. 给 字符串添加新的方法

// JavaScript Document

//给字符串string对象添加新功能。

//去除字符串两端的空格。

String.prototype.trim = function()

{

var start,end;

start = 0;

end = this.length-1;

while(start<=end && this.charAt(start)==" ")

start++;

while(start<=end && this.charAt(end)==' ')

end--;

return this.substring(start,end+1);

}

 

//将字符串变成数组。

String.prototype.toCharArray = function()

{

var arr = new Array(this.length);

for(var x=0; x<this.length; x++)

{

arr[x] = this.charAt(x);

}

return arr;

}

//将字符串进行反转。

String.prototype.reverseString = function()

{

var arr = this.toCharArray();

return arr.reverse().join("");

}

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javascript