JavaScript语法
什么是脚本程序和JavaScript
*什么是脚本程序
<html>
<script language="javascript">
alert(new Date());
</script>
</html>
*JavaScript简介
前身叫作Livescript,是一种基于对象(Object)和事件驱动(Event Driver),并具有安全性能的脚本语言.
*JavaScript与Java
是两个公司开发的两个不同产品,作用与用途大不一样,但两者语法上有很多相似之处,JavaScript并不是
Java的子集.
*JavaScript,JScript与ECMAScript
*脚本代码的位置
我们可以把代码放到<script></script>标签之间:
<script>
var x=3;
</script>
<p>This is a HTML 段落</p>
<script>
alert(x);
</script>
也可以放在一个单独的文件中:
<html>
<script src="script.js" language="javascript">
*将脚本程序代码作为属性值
<a href="javascript:alert(new Data());">javascript</a>
</html>
=======================================================================================
JavaScript的基本语法
*JavaScript中的标识符
标识符是指JavaScript中定义的符号,例如,变量名,函数名,数组名等.标识符可以由任意顺序的
大小写字母,数字,下划线(_)和美元符号($)组成,但标识符不能以数字开头,不能是JavaScript
中的保留关键字.
合法的标识符举例: indentifler,username,user_name,_username,$username
非法的标识符举例: int,98.3,Hello World
*Java严格区分大小写
computer和Computer是两个完全不同的标识符
*JavaScript程序代码格式
每条功能语句的最后必须用分号(;)结束,每个词之间用空格,制表符,换行符或大括号,小括号这样
的分隔符隔开.
*JavaScript程序的注释
/*...*/中可以嵌套"//"注释,但不能嵌套"/"...."/".
================================================================================
基本数据类型与常量
*正型常量
十六进制以Ox或OX开头,例如:Ox8a.八进制必须以O开头,例如: 0123.十进制的第一位不能为0
(数字0除外),例如: 123
*字符常量
12.32,123.42,5E7,4e5等.
*布尔值
true和false.
*字符串常量
例如: "a book of JavaScript",'abc',"a",""(空字符串) .
特殊字符需要用反斜杠(\)来转意.
例如: \r, \n, \t, \b, \', \\
在JavaScript中一个连续的字符串不能分开在两行中来写.可以使用"+"号连起来.
*null常量
表示变量的值为空
*undefined常量
表示一个变量还没有被复值时的状态,或某个对象的属性不存在.
=========================================================================================
变量
*定义一个变量,系统就会为之分配一块内存,程序可以用变量名来表示这块内存中的数据.
*声明变量用var关键字
例如: var x; (这个时候就是undifeined)
*声明变量的同时为其赋值
例如: var name="lisi";
*对已赋值的变量赋于一个其他类型的数据
例如: name=123;
*不事先声明变量而直接使用
例如: x=1234;
算术运算符
*+ 加法运算符或正值运算符,例如, x+5, +6.
它还能实现多个字符串的想加,也能将字符串与其他的数据类型连成一个新的字符串,条件
条件是该表达式中至少有一个字符串,例如: "x"+123的结果为"x123".
*- 减法运算符或负预算符,例如, 7-3, -8.
** 乘法运算符,例如, 3*7.
*/ 除法运算符,例如 9/4.
*% 求模运算符(算术中的求余),例如, 5%2
*++将变量值加1后再将结果赋给这个变量,分为两种,例如a++和++a
*--用法与++预算符一样
赋值运算符
赋值运算符的作用是将一个值赋给一个变量,最常用的是"=",还可以由"="运算符和其他的一些
预算符组合成新的运算符,例如:
"+=","-="等.
比较运算符
*>大于
当左边的操作数大于右边的操作数时,返回true.
*<小与
*=
*<=
*>=
*==
*!=
注意: 不要把"=="写成"="
逻辑运算符
*&&
逻辑与,当左右两边的操作数都为true时,返回值为true,否则为false.
*||
逻辑或,当左右两边的操作数都为false时,返回值为false,否则为true.
*!
逻辑非,当操作数为ture的时,返回值为false,否则为true.
========================================================================
程序流程控制
*顺序结构
*if条件选择语句
*switch选择语句
*while循环语句
*do while语句
*for循环语句
*break与continue语句
if条件语句语法1:
if(条件语句)
{
执行语句块
}
注意:if(x==null)或if(typeof(x)=="undefined")可以简写成if(!x)
if条件语句语法2:
if(条件语句)
{
执行语句块1
}
else
{
执行语句块2
}
变量=布尔表达式? 语句1 :语句2
if条件语句语法3:
if(条件语句)
{
执行语句块1
}
else if(条件语句2)
{
执行语句块2
}
....
else if(条件语句块n)
{
执行语句块n
}
else
{
执行语句块n+1
}
if语句块的嵌套
if(x<1)
{
if(y==1)
alert("x<1,y==1");
else
alert("x<1,y!=1");
}
else if(x>10)
{
if(y==1)
alert("x>10,y==1);
else
alert("x>10,y!=1");
}
===================================================================
函数
*函数的作用与定义
*全局变量与局部变量
*参数个数可变的函数
*创建动态函数
*JavaScript中的系统函数
定义一个函数的语法如下:
function 函数名 (参数列表)
{
程序代码
return 表达式;
}
对函数调用的几种方式:
1.函数名(传递函数的参数1,传递给函数的参数2,.....)
2.变量=函数名(传递函数的参数1,传递给函数的参数2,.....)
3.对于有返回值的函数调用,也可以在程序中直接使用返回结果,例如:
alert("sum="+square(2,3));
全局变量与局部变量,看下面的代码:
<script language="javascript">
var msg="全局变量";
function show()
{
msg="局部变量";
}
show();
alert(msg);
</script>
参数个数可变的的函数:
<script language="javascript">
function testparams()
{
var params="";
for(var i=0;i<arguments.length;i++)
{
params +=" "+ arguments[i];
}
alert(params);
}
testparams("abc",123);
testparams(123,456,"abc");
</script>
注意:arguments代表了传递给函数的所有参数的所有集合。当函数的个数不确定,
获得参数个数很多,你又不想为每个参数定义一个变量,那么你就可以定义一个
像上面那个一样的,定义一个为空的参数名,在内部用循环来实现。
创建动态函数的语法:
var varName=new Function(argument1,....,lastArgument);
说明:
所有的参数都必须是字符串型的,最后的参数必须是这个动态函数的功能程序代码.
例子:
<script>
var square=new Function("x","y",
"var sum;sum=x*x+y*y; return sum;");
alert(square(3,2));
</script>
动态函数有什么作用,在什么情况下使用?
JavaScript中的系统函数:
.encodeURI方法(比URL的描述的范围更大,一般情况下可以等同)
返回一个URI字符串编码后的效果。例如:
<script language="javascript">
var uriStr=encodeURI("http://www.doit.org/index.html?country=中国&name=z x");
alert(uriStr);
</script>
.decodeURI方法
将一个已编码的URI字符串解码成最初的字符串并返回.
.parseInt方法
第一字符串按指定的进制转换成一个整数,语法格式为:parseInt(numString,[redix])。
如果没有指定第二个参数,则前缀为'Ox'的字符串被视为十六进制,前缀为'O'的字符串
被视为八进制,所有其他的字符串被视为十进制。
例如: alert(parseInt("123abc",10));
.parseFloat方法
将一个字符串转换为小数。
.isNaN方法(用与检测)
.escape方法(用于对文本的简单加密)
返回对一个字符串进行编码后的结果字符串。所有空格,标点,重音符号以及任何其他
ASCII字符都用%xx编码替换,其中xx等于表示该字符的Unicode编码的十六进制数,字符
值大于255字符以%uxxxx格式表示。
.unescape方法
将一个用escape方法编码的字符串解码成原始字符串。
.eval方法
将其中的参数字符串作为一个JavaScript表达式执行。
=======================================================================
对象
*对象与对象实例
*构造方法与this关键字的作用
*在函数中修改参数值的问题
对象与对象实例
.对象中所包含的变量就是对象的属性,对象中所包含的对属性进行操作的函数就是对象的
方法,对象的属性和方法都叫对象的成员。
.对象是某一类事物的描述,是抽象的概念;而对象实例是一类事物中的具体个例。
.能够被用来创建对象实例的函数就是对象的构造函数,只要定义一个对象的构造函数,就
等于被定义了一个对象。使用new关键字和对象的构造函数就可以创建对象实例,语法格式
如下: var ObjectInstance = new ObjName(传递给该对象的实际参数列表)。
<script language="javascript">
function Person()
{
//这是一个构造函数
}
var person1 = new Person(); //创建了一个实例变量(对象实例)
person1.age = 18;
person1.name = "blovesaga"; //age和name为对象属性
//alert(person1.name+"."+person1.age);
function sayFunc()
{
alert(person1.name+"."+person1.age);//我们也可以使用person["age"](对象实例["成员变量"])来访问
}
person1.say=sayFunc; //把方法名赋值给了person1.say成员,我们可以在其他地方像
//调用方法一样来调用
person1.say();
</script>
看下面的例子:
<html>
<script language="javascript">
//定义一个构造函数,也就是对象的名称为person
function Person()
{
}
//创建一个对象实例
var person1=new Person();
person1.age=18;
person1.name="zxy";
//编写一个成员方法
function sayFunc()
{
var x="name";
eval("alert(person1."+ x + ");"); //这个字符串中的内容将被作为JavaScipt代码来执行
alert(person1.name+":"+person1.age);
}
person1.say=sayFunc; //把方法名赋值给了person1.say成员
person1.say=sayFunc(); //写了括号表示执行sayFunc()函数在复值
person1.say();
</script>
</html>
===================================================================
构造方法与this关键字
.为一个对象实例新增加的属性和方法,不会增加到同一个对象所产生的其它对象实例上。
.所有的实例对象在创建都会自动调用构造函数,在构造函数中增加的属性和方法会被
增加到每个对象实例上。
.对象实例是使用new关键字创建的,在构造方法中不要有返回结果的return语句。
.调用对象的成员方法时,需要使用“对象实例.成员方法"的形式,很显然,用作成
员方法的函数被调用,一定伴随有某个对象实例。this关键字代表某个成员方法执行时
,引用该方法的当前对象实例,所以,this关键字一般只在用作对象成员方法的
函数中出现。
<script language="javascript">
function Person(name,age)
{
this.age=age;
this.name=name;
this.say=sayFunc;
}
function sayFunc()
{
alert(this.name+":"+this.age);
}
var person1=new Person("张山",18);
person1.say();
var person2 = new Person("里四",30);
person2.say();
</script>
例子代码:
<html>
<script language="javascript">
//定义一个构造函数
function Person(name,age)
{
this.name=name;//当前的对象实例增加一个成员变量name,成员变量的通过Person()参数name传递进来
this.age=age;//当前的对象实例增加一个成员变量age,成员变量的通过Person()参数age传递进来
this.say=sayFunc; //增加一个sayFunc()函数
}
function sayFunc()
{
alert(this.name + ":" + this.age);
}
//创建一个对象实例
var person1=new Person("张三",18);
person1.say(); //调用person1的say()成员方法
var person2=new Person("李四",29);
person2.say(); //调用person2的say()成员方法
</script>
</html>
=====================================================================
在函数中修改参数值的问题
将基本数据类型的变量作为函数参数传递的情况:
<script language="javascript">
function changeValue(x)
{
x=5;
}
var x=3;
changeValue(x);
alert(x);
</script>
注意: 在函数changeValue(x)中的x=5并不能修改主程序中的x值,函数接受的参数
就相当于一个局部变量,当函数调用完也就没用了。所以该程序的结果为x=3;如果
我们把一个对象的实例传递给函数,而我们有在函数中修改了对象实例的属性,那么
最后的结果也会变化的。