Javascript
<script language="javascript">
alert(new Date());
</script>
Javascript 基本语法
1. script 的位置
<script>
</script>
2. 放到一个单独的文件里
*.js
<script: src=”showDate.js” language=”javascript”>
</script>
3. 将脚本程序代码作为属性值
<a href="javascript:alert(new Date());">show Date</a>
Javascript 不同于Java/c的语法:
数据类型:
整型,实型(float,double ?),布尔值,字符串
变量声明:( 弱类型语言)
var name=”moon”;
undefined 未赋值,未知状态
函数:
function pingfang(x){
return x*x;
}
全局变量和局部变量问题/传值&传引用:
<script lanaguage="javascript">
var msg="全局变量";
function show()
{
msg="局部变量";
}
show();
alert(msg);
var i=10;
alert("i Before:"+i);
function change(i)
{
i+=10;
alert("i change"+i)
return i;
}
var j=change(i);
alert("i after"+i+"/tj"+j);
</script>
<html>
<head>third page</head>
<body>
<p align="center"><font color="#8000ff"> This is the third page</font></p>
</body>
</html>
运行一下可以看到,是传值,要注意和局部变量,全局变量的区别.
如果是变量名都一样,局部变量会改变全局变量的值(在Java 里也是这样的情况)!注意,和传值到一个函数(方法)里是完全不同的概念,传递函数(方法)里值是不变的.
package moonsoft.j2se.testBasic;
public class testQUJB
{
public testQUJB()
{
}
public static void main(String args[])
{
int x=10;
System.out.println(x);
change(x);
System.out.println(x);
int i=10;
System.out.println("quanju"+i);
for( int j=0; j<=2; j++)
{
i=20;
int k=15;
System.out.print(i+"/t"+k);
}
System.out.println("after"+i);
}
public static void change(int x)
{
x+=10;
System.out.println(x);
}
}
Javascript 的可变参数:
<script lanaguage="javascript">
function testCanShu(){
var params="";
for(var i=0; i<arguments.length; i++)
params=params+" "+arguments[i];
alert(params);
}
testCanShu("abc", "123");
testCanShu(123, 456, 789, "abc");
</script>
<html>
<head>third page</head>
<body>
<p align="center"><font color="#8000ff"> This is the third page</font></p>
</body>
</html>
arguments 为对象,不可以忽略大小写,写成argument 更不行!
创建动态函数:
<script language="javascript">
var square=new Function("x", "y", "var sum; sum=x*x+y*y; return sum; ");
alert(square(3,2));
</script>
Javascript 的系统函数:
EncodeUrI
DecodeUri
ParseInt
ParseFloat
IsNaN
Escape
Unescape
Eval
对象
Javascript 是基于对象的语言,而不是面向对象的语言,这句话该如何理解?
创建对象的实例:
Var objInstance =new objName(参数列表);
<script language="javascript">
function Person()
{}
var person1=new Person();
person1.age=26;
person1.name="Aaron";
alert(person1.age+" "+person1.name);
function say()
{
alert(person1.name+""+person1.age);
}
person1.say=say;//比较乱,一个方法可以带括号,可以带一个参数
//,n个参数,编译器都承认!!!
person1.say();
</script>
this 关键字和重载的研究
<script language="javascript">
function Person(name, age)
{
this.age=age;
this.name=name;
}
function Person(name)
{
this.name=name;
}
function say()
{
alert(this.name+", "+this.age);
}
var person1=new Person("Aaron", 26);
var person2=new Person("Kevin");
person1.say=say;
person2.say=say;
person1.say();
person2.say();
</script>
关键字this 只用在对象方法中出现, 它代表某个成员方法执行时,引用该方法当前对象的实例, 同java
关于函数(方法)的重载,没有意义,在javascript里面.
可变参数的函数用arguments 来实现,象上面,它只选择了最少的那个函数来实现.
传值还是传引用?
<script language="javascript">
function change(i)
{i+=5;
alert(i);//10
}
var i=5;
alert(i); //5
change(i);
alert(i);//5
</script>
这里演示的是传值问题:传值的时候建立了一份拷贝,然后退出该函数,拷贝消失,值不变.所以,这里说,javascipt 一样是传值,同java, 在C++/C/dephi 中,&value 可以传引用.这里永远是传值!
下面通过修改对象的实例的状态来改变其值:
<script language="javascript">
function Add(number) //构造函数
{this.number=number;
alert(this.number);
}
function say() //一个方法
{alert(this.number);}
var j=new Add(5);//5
j.say=say;
j.say();//5
function change()// 改变对象的状态
{
this.number+=5;
}
j.change=change;
j.change();//10
j.say();//10
</script>
这里,j is a instance of ADD fuction, so, We can say it is指向了一块内存区域的头指针,这块区域的内容是5,还有一个alert();然后我们又增加了一个方法: j.say=say;
接着,我们又增加了一个方法, j.change=change;
这里建立了一份拷贝,也指向这块内存区域,接着我们修改了这块区域,当然,退出后也会改变.
在javascipt 中有两种对象, 一种是需要new 的,一种是不需要new 的(静态对象)
Javascript 的内部对象
Object 对象
<script language="javascript">
function getAttribute(attr)
{
alert(person[attr]);
}
var person=new Object();
person.name="Aaron";
person.age=26;
getAttribute("name");//注意这里必须加双引号
getAttribute("age");//注意这里必须加双引号
</script>
是其它对象的基础,可以随意添加属性(唉,没有继承的概念......)
String 对象
1) 属性:
Var myFirstString=new String("moonsoft.blogchina.com");//StringmyFristString="......"?不可以
var length=myFirstString.length;//22
alert(length);
2) 方法
同java部分,但 match, link methods, 特殊
Method 对象
静态对象
Date 对象
<script language="javascript">
var current_time=new Date();
var strDate=current_time.getYear()+"年";
strDate+=current_time.getMonth()+1+"月";
strDate+=current_time.getDate()+"日";
alert(current_time);
alert(strDate);
</script>
strDate+=current_time.getMonth()+1+"月";
这里和java.util.*; 里的一样,1月为0,12月为11,所以要加1.
toString
转化成某种格式的字符串
toString(16); 转化成16进制
专门用于对象的语句
1.with(object instance) {}
如把上面弹出时间的语句改成:
<script language="javascript">
var current_time=new Date();
with(current_time){ 重复循环对某个对象进行操作
var strDate=getYear()+"年";
strDate+=getMonth()+1+"月";
strDate+=getDate()+"日";}
alert(current_time);
alert(strDate);
</script>
2.for( 变量 in 对象){} 对某个对象的所有属性进行循环操作
数组
普通数组:
<script language="javascript">
var array1=[1, 2, 3, 4, 5.56];//notice here : strange
for( var i=0 ; i<=array1.length-1; i++)
{
alert(array1[i]);
}
</script>
数组的数组
<script language="javascript">
var Array2=[["a", "b", "c"], ["A", "B", "C"], 1, 2 ];
for(var i=0; i<=Array2.length-1; i++)
{
alert(Array2[i]);
}
</script>
突然想到,javascript 根本不在乎数组的类型是什么,字符串和数字都可以放在一起,有意思.
对象数组
<script language="javascript">
function objectArray(size)
{
this.length=size;
for(var i=0; i<size; i++)
{
this[i]="";
}
}
var myObjects=new objectArray(3);
myObjects[0]=3;
myObjects[1]="love";
myObjects[2]="3.14159265453";
var x, str="";
for(x in myObjects)
{
str+=x+":"+myObjects[x]+"/n";
}
alert(str);
</script>
有一点难.
Array 对象
方便对数组进行排序,插入,删除合并等操作.
var arr1=new Array();
var arr2=new Array(4);
var arr3=new Array(3.5,4, "arry", 789.5);
arr.sort();
以上是javascript 的基础知识.接下来要攻DOM编程.利用javascript 来和用户进行交互.这也是我们最愿意学的.