分类: JavaScript
2013-02-22 17:42:17
在学习HTML(超文本标记语言)开发网上站点时,没有像其它网站这么酷,似乎还缺少些什么东西,那别人的这种效果是怎么做出来的呢?通过查询,要达到网页炫酷的效果有以下几种方式:使用Flash特效技术等。那到底什么是Javascript,Javascript又用来做什么?下面将走进javascritp脚本语言的技术殿堂。用脚本不仅可以制作网站特效,还可以做表单验证。像网上银行业务注册,要填写身份证号,手机号,填写完毕还要验证有没有这个身份证号,手机号对不对,如果该网站访问量很大,服务器的负担就会很重,就像100个学生等待一位老师一一解答问题一样,如果使用客户端脚本技术,这时就像老师让学生们自问自答,这样老师就没压力了。
为什么要学习javascript
起初HTML是应用Internet上传输数据的一种文档格式,但随着社会的发展,焦点很快从学术领域转变成普通用户领域,Internet逐渐成为人们的一种娱乐方式,开发者为了吸引普通用户,让之前死气沉沉的页面变得更加丰富多彩,更加互动,SunMicrosystems和Netscape共同开出了Javascript脚本语言。使用Javascript可以动态的控制DOM模型,从而可以构建人际交互的HTML系统。Javascript还可以执行:任务计算、编写游戏、表单检查、自定义图形、创建安全密码等强大功能。主要基于以下两点学习Javascript脚本语言:减轻服务端压力的表单检查和让页面更加丰富多彩的动态效果。
什么是Javascript
javascript是一种基于对象和事件驱动的脚本语言,例如操作客户端的DOM对象和响应用户的操作。javascript脚本嵌入客户端浏览器解释执行,无论是服务端还是客户端javascript,javascript代码都将下载到客户端,从而减轻服务端压力。另外javascript是弱类型语言,意味着声明时不必明确数据类型,程序在执行时会根据数据值动态推断出数据的类型,弱类型带来的优点是灵活性强,缺点是易出错。
客户端和Web服务器交互模型是请求/响应模型。javascript具体执行过程是:用户输入请求,客户端浏览器向服务器请求带有javascript的web程序,服务器接收响应请求并将处理发送给请求者,客户端浏览器下载带有javascript的html页面,最后由客户端浏览器从上往下逐行解析html标签和脚本呈现给用户。为了更好的理解附图一张。
包含javascript的页面客户端只需下载一次
javascript基本语法
javascript也具备面向对象特性,所以像c#语法中的基础语法javascript基本也有。基本语法结构是一套基础性规则,它用来告诉你如何用这门语言来编写程序。作为基础语法,它规定了如何编写注释,声明变量的规则是什么等等。
5.1
变量的声明和赋值
javascript是一种弱类型语言,在声明时无需指定数据类型,类型由程序执行时推断出变量的值类型。声明变量只需使用一个var关键字:
var a;
var num;
也可以声明时赋初始值:
var a = 1;
var num ="1";
也可以同时声明多个变量,之间用逗号分隔:
var a,b;
var a=1,num="1";
var a, num =1;
javascript中即使没有声明变量也可以使用,系统会自动声明变量a,但是不推荐这样使用:
a=1;
5.1.1 javascript变量命名规则
可以以$、字母下划线开头,一般采用Pascal和Camel命名法,如下。
Pascal命名法,即所有单词首字母大写:
var
UserName;
Camel命名法,即首单词的首字母小写,其它都大写:
var
userName;
5.2 注释
javascript有2种注释格式,单行和多行注释。
单行注释,使用//:
var a;
//声明了变量a
多行注释,使用双斜杠加两星:
5.3.1 条件语句 if
else/else if:
它的主要作用是有条件的执行某段代码,先将if
else 如下:
5.3.1.1
if else有2种形式下面先介绍第一种形式,当条件为true执行代码段:
if(布尔表达式)
{
//javascript代码1,如果布尔表达式条件为真,就执行这段
}
第二种形式引入else,当条件为false执行else代码段:
if(布尔表达式)
{
//javascript代码1,如果布尔表达式条件为真,就执行这段
}else
{
//javascript代码2,否则执行这段
}
5.3.1.2
else if条件控制语句是if
else第一种形式的连贯写法,用于控制多个分支,下面介绍if else
第一种形式引出第else if,当有多个分支时可以这样写:
if(条件表达式1)
{
//javascript代码1,如果布尔表达式条件为真,就执行这段
}
if(条件表达式2)
{
//javascript代码2,如果布尔表达式条件为真,就执行这段
}
if(条件表达式3)
{
//javascript代码3,如果布尔表达式条件为真,就执行这段
}
以上多个if分支代码看似并没什么问题,但是我觉得这种写法会给程序员一些误导,不连贯性,下面推荐另一种写法:
if(条件表达式1)
{
//javascript代码1,如果布尔表达式条件为真,就执行这段
}else
if(条件表达式2)
{
//javascript代码2,如果布尔表达式条件为真,就执行这段
}else if(条件表达式3)
{
//javascript代码3,如果布尔表达式条件为真,就执行这段
}
5.3.2 循环语句 for、while、do/while、for/in:
循环语句的作用就是反复的执行一段代码,这个过程也可以叫做回路。javascript中有4中循环,由于时间关系,只记录一种最常用的for循环,如下:
5.3.2.1
for循环最常用方式之一就是应用于数组遍历和循环特定的次数。for循环结构就像下面所看到的的,它由初始化表达式、循环条件表达式、增或减量组成,每个表达式用分号分隔。初始化表达式表示循环的起始值,只在循环前检测一次,开始循环前会先检测循环条件成不成立,成立时进入循环,当完成一个循环时就会对初始值增量或减量,随后继续判断循环条件成不成立,以此类推直到循环条件不成立时退出整个循环:
for(初始化表达式;循环条件表达式;增或减量)
{//准备循环代码}
下面写一个完整的循环:
fo(var a=1;a<=10;a++)
{
//这个将不停的循环10次。每循环一次a将加1。
}
5.3.3 开关语句 switch
switch也属于分支语句,有if为什么还有switch,存在即合理,当然自有它的用处。想一下,有一种情况是使用if判断多个分支,判断条件又都依赖于一个表达式的值。多个分支、判断条件又都依赖于一个表达式的值,这两者同时成立时,就可以使用switch 开关语句,switch开关语句对于多个分支的判断效率要更高,代码逻辑及结构更清晰。下面直接上switch语法,解释其它需要注意和了解的地方,这样更直观:
switch(表达式)
{
case
1: //switch执行时先计算出表达式的值。假若值==1,就执行该段
break; //停止switch
case 2: //如果值==2时,就执行该段
break;
case 3: //每个case 等价于一个if分支
break;
case 4: //后面一半是常量,javascript中也可以写成一个表达式
case 5: //注意以下几个case分支时连贯的,并没有在后面写break,在js中是允许的,开发中,还没用这种写法
case 6: //代码。。
case 7: //代码。。
break;
default: //如果没有匹配的case块时,则执行默认的代码段
break; //可以不写break,不会出错
}
上面经常提到表达式,什么是表达式?表达式由什么组成?这里将讲表达式的组成之一运算符。运算符用于将一个或多个操作数组合起来进行运算。例如 + 、-
符号,+ 符号属于算数运算符,用它可以组成算数表达式。简单说下什么是表达式,表达式是由运算符和操作数的组成,任何一个表达式都将返回一个值。下面列出常用运算符类别:
算数运算符:+ 、- 、* 、/ 、% 、++ 、--
比较运算符:<、 >、<= 、>= 、== 、 !=
逻辑运算符:! 、 && 、 ||
赋值运算符:= 等等
javascript中类型非常灵活,对于数据系统有一套规则来决定数据的类型,这个推定的过程称为隐式转换,隐式转换带来是对数据的不明确性。如果想要明确精准的数据及类型,javascript也提供自身数据类型到另一种数据类型的转换和强制换换,这个称为显示转换。javascript数据类型分为两类:原始值类型和对象类型。原始值类型包括数字、字符串、布尔值,还有两个特殊的原始值
null(空) 和undefined
(未定义)。对象类型就是一组有序或无序的属性集合,每个属性键/值队构成。这里记录三种原始值类型中的数字、字符串、布尔类型之间的互转。
5.5.1 Boolean、Number
类型转换成字符串
三种原始值都有toString()方法,可以使用toString()方法分别将数字布尔转换成字符串类型,使用方法如下。
5.5.1.1
布尔类型转字符串:
var b =false; //声明了布尔类型变量b
alert(b.toString()); //用toString()方法,将布尔类型转换成字符串。最后输出"false"
5.5.1.2 数字类型转字符串,数字的toString()有2中模式,默认是10进制形式:
var n =
10; //声明了数字类型变量n
alert(n.toString()); //无论是八进制还是十进制形式数字,默认都会以10进制形式返回。返回字符串 "10"
var c=
null;
c.toString(); //出错
5.5.2
字符串转类型转换成数字
ECMAScript提供2种方法把非数字转换成数字,即parseInt()和parseFloat()。前者转换成整数,后者转换成浮点数,只有对String
类型数字值使用有效,其它类型将返回Nan(非数字),如下:
5.5.2.1 parseInt()
转换前先从字符串索引顺序开始检测字符是否为有效数字,如果首个字符不是数字将返回NaN。否则持续检测并返回转换有效的数字,检测过程直到遇到无效字符终止:
alert("abc123abc"); //首字母检测无效,转换失败返回NaN
alert(parseInt("123abc")); //检测首字符有效,检测并转换,直到检测a字符终止。最终返回有效数字123
alert(parseInt("0xA")); //返回10,默认转10进制形式。和数字转字符串的toString()原理一样,只不过是反过来
5.5.2.2
parseFloat() 检测过程和parseFloat()
相似,不同之处在于字符串必须是十进制或浮点数形式。parseFloat()将遇到的第1个数点视为有效字符:
alert("123.1abc"); //返回123.1,检测a字符无效终止
alert("123.1.1"); //返回123.1,检测到第二个小数点无效终止
alert("0101"); //返回101
5.5.3
强制类型转换
ECMAScript提供3种方法把值的类型强制转换特定类型 Boolean(value)、Number(value)、String(value)。强制转换虽然提供一些方便,但是不宜控制,给值前应该要保证数据的正确性。
5.5.3.1 Boolean(value) 将给值 value 强制转换成布尔类型:
var a = Boolean(""); //空字符串将返回false
var a2 = Boolean(0); //数字0将返回false
var a3 =Boolean(null); //将返回false
var a4 = Boolean(50); //非0数字返回true
var a5 = Boolean("aaa"); //非空字符串返回true
var a6 = Boolean(new Object()); //将返回true,对象
5.5.3.2 Number(value)将给值 value 强制转换成数字类型,数字强制转换有一点不同于parseInt()和parseFloat(),强制数字类型转换在遇到无效字符是返回NaN:
var n = Number(false); //将返回0
var n2= Number(true); //经返回1
var n3 =Number(undefined); //将返回NaN
var n4 = Number(null); //将返回0
var n5 = Number("1.2.1"); //将返回NaN
var n6 =Number("abc123"); //将返回NaN
var n7 =Number("1.2") //将返回浮点型1.2
5.5.3.3 String(value) 将给值强制转换成字符串,这个最简单,无论给什么值最后都将字符串形式返回
var s = String(null); //将返回"null"