JavaScript基础语法

JavaScript基本语法

什么是脚本语言?

      首先说一下HTML,HTML是一种标记语言,它只能定义内容的表现形式,不具有逻辑性,不能与用户进行交互。如果浏览器在解释HTML语言的基础上,还能够解释和运行嵌入在网页文件中的一种具有程序逻辑的语言,那么网页就能够像平时用到的各种Windows程序一样与用户进行交互,那么网页的功能将会被大大扩展。

      像这种嵌入在HTML中的程序语言就称为脚本语言(一条条的文字命令),浏览器中要集成有用于脚本程序的模块,这种模块称为脚本引擎。简言之,脚本语言就是用于编写嵌入于文档中的程序,它由浏览器负责解释和执行,可以在网页上产生动态的显示效果和实现与用户交互的特效功能。

      脚本程序代码放在HTML文档的<script></script>标签对之间,当浏览器读取到网页的<script>标签之后就知道应该把其中的内容当做某种程序语言进行解释执行,而不是再把它当做网页中的普通文本。

      脚本程序在什么时候执行呢?当浏览器打开一个HTML文档时,它会从头到尾主句解释整个文档中的HTML标签和脚本代码块,如果脚本快中有可以直接执行的语句,浏览器则会在读取到该语句的时候立即执行。

      目前最常见的两种脚本语言是VBScript和JavaScript。可以使用<script>标签的language属性来指定要使用的脚本语言。但大多数用户都习惯使用JavaScript。这种嵌入在网页中的脚本语言完全是再浏览器上运行的,与WWW服务器没有任何关系,了解了这个道理,对于区分客户端(浏览器)的脚本语言和ASP、JSP等服务器端的脚本语言的差异是很有帮助的。

JavaScript简介

      JavaScript语言的前身叫做LiveScript,自从Sun公司推出著名的Java之后,Netscape公司引进了Sun公司有关Java的概念,将自己原有的LiveScript进行重新设计,并改名为JavaScript。

      JavaScript代码并不编译为二进制代码文件,而是作为HTML文件的一部分由浏览器解释执行,维护和修改起来非常方便。同时JavaScript也是一种解释型语言---无需编译就可以随时运行,而且是跨平台的。

      Java和JavaScript是两个公司开发的两个不同的产品,作用域用途大不一样:Java是Sun公司推出的面向对象的程序设计语言,特别适合于Internet应用程序开发;而JavaScript是Netscape公司的产品,是为了扩展NetScape Navigator功能,而开发的一种可以嵌入在Web页面中的机遇对象和事件驱动的解释型语言。Java是一种比JavaScript复杂许多的程序语言,是面向对象的,而JavaScript是简单的脚本语言,是基于对象的,虽然两者在语法上有很多相似之处,但是两者没有多大关系,JavaScript并不是Java的子集。JScript的微软自己的脚本语言,基本上和JavaScript是相同的,只是在一些细节上有所出入。JavaScript不是一成不变的,而且在不同浏览器所支持的JavaScript功能不不尽相同。

基本语法

一、脚本代码的位置,可以在三个地方编写JavaScript脚本代码:

1、在网页文件的<script></script>标签对中直接编写脚本代码程序;

      使用最多的情况(一般放在head里面)。

      <script>标签的位置并不是固定的,可以出现在<head>或者<body>中的任何地方;而且在一个文档中可以有多个<script>标签来嵌入多段JavaScript代码,每段代码可以互相访问,同将所有JS代码放在一对<script>标签中的效果是一样的。

      旧版本的浏览器并不能识别<script>标签,会直接向用户显式其中的内容,而不是当做脚本语言去执行。为了解决这个问题,可以吧<script></script>标签对中的内容用HTML起始和结束注释标记<!--和-->包括起来。

      支持<script>标签的浏览器会忽略嵌入在<script></script>标签对中的注释符,也就是它会继续执行注释符之间的脚本程序。

2、将脚本代码放置在一个单独的文件中,在网页文件中引用这个脚本程序文件(.js文件);

      Js文件写好之后,只需要在HTML网页中引入JavaScript脚本文件的URL地址即可(也可以通过拖拽的方式)。

3、将脚本程序代码作为某个元素的事件属性值或超链接的href属性值

      超链接<a>的href属性除了可以使用http和mailto等协议之外,还可以使用Javascript协议。如:

  <a href=”javascript:alert(new Date())”;>javascript</a>

      单击这个超链接,浏览器将会执行JavaScript:后面的脚本程序代码。

二、JS中的标识符

      ->标识符是指JavaScript中定义的符号,例如:变量名、函数名、数组名等。标识符可以由任意顺序的大小写字母、数字、下划线和美元符号组成,但不能以数字开头,不能是Javascript中的保留关键字。

另外,JavaScript是严格区分大小写的。Js中的代码格式、注释等和C#中类似。

      ->在JS中声明一个变量用var,因为JS是一种弱类型的语言,在运行的时候才能够确定类型;字符串用双引号或者单引号都可以,但是推荐在HTML中用双引号,JS中用单引号。

      ->如果在JS代码中出现错误,浏览器会直接跳过不执行,这一点类似C#中的try-catch语句。

      ->DHTML:动态HTML(JavaScript+HTML+CSS)

三、JS数据类型与常量

      ->布尔类型—Boolean

           True or false

      ->数字类型—number

           ->整形常量

           整型常量可以使用十六进制、八进制和十进制表示。

  ->实型常量

      实型常量是由整数部分加小数部分表示,也可以用科学计数法来表示。

      ->字符串—string

           JS中没有单独的字符常量,而只有表示由若干字符所组成的字符串常量,使用单引号或者双引号引起来(推荐在JS中使用单引号;HTML中使用双引号),在JS中,一个连续的字符串不能分开在两行中编写,如果一个字符串太长,为了便于阅读,可以将字符串在两行上书写,中间加上+号,然后再断行。

      ->未定义—undefined

           用于表示变量还没有被赋值或对象的某个属性不存在。Null表示赋给变量的值为“空“,是一个具有特殊意义的值,而undefined则表示还没有对变量赋值,变量的值还处于未知状态;声明一个变量而未未知赋值,就默认为undefined。

      ->空对象—null

           表示一个变量所指向的对象为空值。

      ->对象类型—object

           JS中,除了object是引用类型之外,其他都是基本数据类型(函数是引用类型)。

      Tips:

      JS中,定义一个变量但没有为之赋值,那么变量的值就为undefined,在这种情况下,可以使用两种方式判断变量值是否为undefined:

      var x;

if(!x)

{

      x=’new’;

}或

if(typeof(x)==’undefined’)

{

      x=’new’;

}

      JS中的变量和运算符、以及循环控制语句:if-else,while,switch-case、循环结束语句break,continue等语句都与C#中类似,不再多写。

      值得一提的是JS中变量的作用域:在JS中不存在块级作用域,所以在if语句中声明的变量作用域在整个方法中都可以使用,包括for循环等。Var表示局部变量,不写var表示全局变量,如果在方法外定义变量像这样:var x;那么等同于全局变量,因为它在整个JS代码中都是可以被访问的。因此,我们在声明变量的时候尽量加上var。

      另外:switch-case语句中判断表达式结果用的是完全等于(===)。

四、函数

      使用函数的目的就是为了使代码清晰、易懂、易读、易维护,因此一个函数中的代码平均不要超过100行,最长不要超过200行,否则这个代码就会变得比较难理解。

定义函数的格式:

function 函数名(参数列表)

{

      程序代码

      return 表达式;

}

      参数列表:就是程序在调用某个函数,执行其中的程序代码时,有时需要给函数传递一些参数,这时就有了参数列表(即使没有参数,方法名后面的括号也不能省)。

      返回值:如果主程序要求函数返回一个结果,就必须使return语句后面跟上这个要返回的结果。如果没有返回值或者不写return语句,这个函数就返回一个为undefined的值。

->匿名函数

      又称作动态函数,后面直接加分号。

     var varName=new function( ){ };

      在之后的JS程序中,匿名函数用的非常之多。

->JS中的系统函数

      可以直接调用这些函数来完成某些功能。

      1、encodeURI

      方法返回对一个URI字符串编码后的结果。URL是最常用的一种URI,URI的概念比URL表示的概念更大,它不仅限于描述Internet资源的地址,还包括数字对象标识符DOI和国际标准书号ISBN等标识名称。

      在一般情况下,可以简单地认为URL等同于URI。

例如:<script type=”text/javacsript”>

                 var temp=encodeURI(’http://www.baidu.com/百度知道’);

                 alert(temp);

</script>

结果如下:

 

      2、decodeURI

      DecodeURI方法将一个已编码的URI字符串解码成最初始的字符串并返回。

      3、parseInt

      parseInt方法将字符串转换为整数,当转换过程中遇到非数字则终止转换,只保留转换成功的数字;如果遇到的第一个就是非数字,则返回NaN(Not a Number)。

      parseInt有两个参数:(numString,[radix]),第一个参数是要进行转换的字符串;第二个参数是可选的。如果没有指定第二个参数,则前缀为‘0x’的字符串被视为十六进制,前缀为‘0’的字符串被视为十进制,默认为十进制。

类似的数据转换函数还有:parseFloat。

4、isNaN

  isNaN方法用于检测parseInt和parseFloat方法的返回值是否为NaN,如果是则返回true,不是则返回false。

      5、string

      把任意类型转换为字符串时,如果使用string()可以把null值转换为‘null’,但是如果使用ToString()方法就会报错。

6、eval

  eval(….)可以直接执行括号中的代码,就是把字符串编译成JS代码来执行。(不常用)

JS中的系统函数有很多,没有必要全部记住,在需要的时候我一般通过查看W3CSchool中的JavaScript参考手册来找到需要的内容。

 

五、对象

->对象与对象实例

      对象是对某一类事物的描述,是抽象上的概念‘而对象实例是一类事物中的具体个例。对象实例是用new关键字创建的,不是由构造方法创建的,因此在构造方法中部要有返回结果的return语句。使用new关键字创建一个对象实例后,JavaScript会接着自动调用所使用的构造函数。如果不用new关键字,那么就是普通的方法调用。

      调用对象的成员方法时,需要使用“对象实例.成员方法”的形式。This关键字一般只在用作对象成员方法的函数中出现,它代表某个成员方法执行时,引用该方法的当前对象实例。在对象的构造方法中使用“this.成员名”的形式,可以为该对象的每个对象实例都增加新的成员。

-> JavaScript的内部对象

对象是JavaScript中用来表示复杂数据类型的一种方式。JavaScript中提供了一些非常有用的内部对象作为语言规范的一部分,每个内部对象都有一些方法和属性,从而为我们快速开发强大的脚本程序提供了非常有利的条件。

1、string对象

String对象是动态对象,需要创建对象实例后才能引用它的属性或方法。

属性:

String对象中最常用的属性是length,表示字符串中的字符个数。

      方法:

      String对象的方法有很多,主要可用于搜索字符串中的字符、转换字符的大小写,以及为某个字符串添加能控制其在web页面中的显示效果的HTML标签。

  ①   anchor方法:为字符串对象中的内容两边加上HTML的定位标签:

如:var temp=’This is an anchor.’;

      Temp=temp.anchor(‘Anchor1’);

      alert(temp);

得到的结果为:

<A  NAME=’ Anchor1’> This is an anchor.</A>

  类似的方法还有:big,bold,dontColor等。

  ②   charAt方法:

  返回字符串对象中的指定位置处的字符,位置的有效值为0到字符串长度-1的数值。当指定的索引位置超出有效范围时,charAt方法返回一个空字符串。

  ③   indexOf方法,返回某个字符串在一个字符串对象中第一次出现的字符位置。搜索从左向右执行,如果未找到字符串,则返回-1。

2、Math对象

      Math对象中提供了一些基本的数学函数和常数,是一个静态对象,不能用new关键字创建对象实例,直接用“对象名.成员”的格式来访问其属性或方法。

属性有E(常数e,2.718)、PI(π的值)等;方法有abs方法(返回数字的绝对值)、random(返回一个0-1之间的伪随机数,Math.random调用,与C#中略有不同)。

3、Date对象

  Date对象用于表示日期和时间,可以通过Date对象的各种方法得到对象实例中的年份、月份、星期等信息。

4、Array对象

      定义一个数组:var arr=[1,2,3];

      使用Array对象来创建数组:var arr1=new Array();

                                               var arr2=new Array(4);

                                               var arr3=new Arrar(4,5,6);

      使用for-in语句遍历,循环的是数组中的键,也就是数组的下标。值通过arr[key]来得到。

 

下面的一段代码是在做基础练习时遇到的一点问题:

<script type=”text/javacsript”>

      Function Person(){

}

var p1 = new Person();

p1.name = ‘张三’;

p1.age = 20;

Person.prototype.sayHi = function(){

      alert(‘Hi,everyone!’);

}

alert("’大家好,我叫’ + this.name + ‘,今年’ + this.age + ‘了。’+p1.sayHi());

</script>

问题:最后一句alert代码中,输出时结果为首先弹出一个“Hi,everyone!”的对话窗,第二次才弹出“大家好,我叫张三,今年20了。undefined”。因为p1.sayHi()方法是被首先执行,然后才执行alert,并且p1.sayHi()的没有返回值,所以得到的结果为undefined。

OK!

posted @ 2012-03-11 14:29  王小萌  阅读(1090)  评论(1编辑  收藏  举报