JavaScript 概述
JavaScript 是基于对旬和事件的脚本语言。
特点:
1,安全性(不允许直接访问本地硬盘),它可以做的就是信息的动态交互。
2,跨平台性。(只要是可以解释JS的浏览器都可以执行,和平台无关)
JavaScript 与 Java 不同
1,JS 是Netscape 公司的产品,Java 是Sun 公司的产品,现在是Orcale公司。
2,JS 是基于对象,Java 是面向对象。
3,JS 只需由浏览器解释就可以执行,Java 需要先由jvm编译成字节码文件,再执行。
4,JS 是弱类型,Java 是强类型。
5,JS 是非严谨的,java 是严谨的。
6,javascript运行在客户端。
JavaScript 与 Html 的结合方式
想要将其它代码融入到Html中,就得使用JavaScript 。都是以标签的形式融入。
1,JS 代码存放在标签 < script >....< / script >中。
常放于head标签内 <head> <script> ........</script> </head>
因为让其先编译执行。
2,使用script 标签的src 属性引入一个js 文件(这样方便后期维护,扩展)。
例:< script src=”test.js” type=”text/javascript”> < /script >
注:规范中script 标签中必须加入type属性。
例:
< script src=”test.js” type=”text/javascript”> < /script >
< script type=”text/javascript”>
JS代码
。。。
< /script >
JavaScript 语法
每一种语言都有自己的语法规则,JS语法与Java 很像,JS 中也一样有变量,语句,函数,数组等觉语言组成元素。
1, 变量
通过关键字 var 来定义(变量,方法,数组都是通过这个来定义的),弱类型是不用指定具体的数据类型。即该变量可以赋予不同类型的常量。
例: var x = 3; x = “hello”; // 注:这里x=3 前var 也可不写,因为JS是非严谨的。
注:JS中特殊的常量值:undefined, 当变量没有初始化就被使用,该变量的值就是undefined(未定义)
注:如果想获取具体值的类型,可以通过typeof来完成
如:alert(typeod(“abc”)); //string
alert(typeod(‘3’)); /string
alert(typeod(true)); //boolean
alert(typeod(77)); //number
alert(typeod(3.5)); //number
全局变量:在script脚本片段中定义的变量。包括for循环中
局部变量:在函数内定义的变量。
如:function demo()
{
var x = 7; //局部变量
}
2,语句(与Java语句格式相同)
一:判断结构:if语句
注:var x = 3;
if(x==4) //可以进行比较运算。
if(x=4) //可以进行赋值运算,而且可以两样进行判断,不会报错。
因为在JS中0就是false, 非0就是true (通常用1表示)。
非null 为true, 空为false
所以if(x=4)结果是true。
所以alert(true+1) 是可以进行运算的。结果为 2
如果想进行比较,可以通过这个方法来避免这个问题:if(4==x){}
二:选择结构:switch
三:循环结构:while语句,do....while语句,for语句
注:不同的是,没有了具体数据类型的限制,使用是要注意。
四:JS特有语句
with(对象) {} 可以确定对象所使用的范围,在范围内,可以不写 “对象。” 简化了对象的操作。
for(变量 in 对象) 可以对对象的属性及行为进行遍历。
3,函数
一:一般函数
格式:
function 函数名(形式参数。。。)
{
执行语句;
return 返回值;//这里可以用,也可以不用。这点跟java不一样
}
函数是多条执行语句的封装体,只有被调用才会被运行。通常代码复用可以进行封装成函数。
注意:在Javascript中调用有参数的函数,但没有为其传值,或调用无参数的函数,又传了值,该函数也一样运行。也就是说只要写了函数名后面跟有一对小括号,该函数就会运行。
那么传入的参数呢?
其实,在函数中有一个参数数组对象(arguments),该对象将传递的参数都封装在一个数组中。
例:function demo()
{
alert(arguments.length);
}
demo(“hello”,123,true);//调用函数,弹出的结果是 3 ,如果相得到所有的参数值,可以通过for 循环遍历该数组。
注意:arguments 可以用this 来代替
例:for(var x = 0; x<arguments.length; x++)
{
alert(arguments[x]);
}
为了增强阅读性,最好按照规范,按照定义好的形式参数传递实际参数。
注意:函数在调用时的其它写法:
var show = demo(); //show变量接收demo函数的返回值。
var show = demo; //这种写法是可以的,意为show和demo代表同一函数,那么该函数也可以 通过show()的方式运行。因为demo本身就是一个对象的引用,这样只是 把引用地址给了show。相当于这个函数有两个名称。
二:动态函数
通过JS的内置对象function实现。
例:var demo = new function( “x,y” ; ”alert(x+y)”; );
demo(4,6);
如同:
function demo(x,y)
{
alert(x+y);
}
demo(4,6);
不同的是,动态函数的参数以及函数体都可以通过参数进行传递,可以动态指定。
三:匿名函数
格式:function(){.....}
例:
var demo = function(){....}
demo();
通过在定义事件属性的行为时较为常用。
例:
function test()
{
alert(“load ok”);
}
window.onload = test;
写成匿名函数的形式:
window.onload = function()
{
alert(“load ok”);
}
匿名函数就是一种简写格式。
4,JavaScript代码执行顺序
JavaScript执行引擎并非一行一行的分析和执行程序,而是一段一段的分析执行。而且在分析执行同一段代码中,定义式的函数语句会被提取出来优先执行。函数定义完后,才会按顺序执行其它代码。
格式:
定义式:function text1(){}
变量式:var text2 = function(){}
注意:
如果代码块中有同名函数,则执行的时候是执行最后一个。因为后面的函数覆盖了前面的同名函数。
例:
function hello(){ alert(“hello,不是我”); }
hello();
function hello(){ alert(“hello,是我”); }
hello();
这两次调用hello()方法所得的结果都是 hello,是我
5,数组
方便操作多元素的容器,可以对其中的元素进行编号。
可以实现堆栈和队列的功能。先进先出,先进后出。等
特点:
1,同一个数组中可以存在任意类型元素
2,数组长度是可变的,相对与java中的集合。
格式:
var arr = new Array();
arr[0] = “hello”;
arr[1] = 124;
var arr = [‘hello’,123,true,”abc”];
二维数组定义:
var arr = [ [3,4,2] ,[ 5,2] ];
通过遍历即可对数组进行基本操作,和java一样,同时也使用了指针思想。
for(var x = 0; x<arr.length; x++)
{
alert(arr[x]);
}
5,对象
Javascript中已定义好的一些对象:
String,Math,Date,Array,Function等,这些对象都有一个属性叫做 prototype 原型。
如何给这些已有对象加入新的功能?
prototype :可以获取指定的对象引用。可以通过该引用给已有的对象赋予一些新的功能。
那么在使用时,可以直接调用定义好的新功能。
例:
给数组Array中加入取最大值功能。
function getMax()
{
var max = 0;
for(var x=1; x<this.length; x++)
{
if(this[x] > this[max])
max = x;
}
return this[max];
}
var arr = [3,4,22,5];
arr.sort(); //直接调用Array对象的sort 方法对数组进行排序。
那么可不可以像调用sort 方法一样调用getMax方法呢?
需要将getMax方法添加到Array对象中。使用prototype 。
Array.prototype.getMax; //加入Array对象中
var x = arr.getMax();
alert(“max=”+x);
//给color加入新功能,自己定义颜色
var str = “abc”;
function mycolor(color)
{
return “<font color= ‘ “+color+” ’ >” + this + “< /font >”;
}
String.prototype.color = mycolor; //加入color对象中
str.color(“red”);
例二:
给字符串String中加入一个新的功能,去掉字符串两端空格。
function trim()
{
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.trim = trim;
var s = “ abc ”;
s = s.trim();
常见的全局方法。
parseInt(numstr, [rakix] ) //将数字格式的字符串转成整数,如果指定了基数那么numstr就会按照 指定基数进行转换。
例:
var num = parseInt(“110” , 2) ; //表示110这个字符串会按照二进制进行转换。
var x = 6;
alert(x.toString(2)) ; //以二进制返回
如何自定义对象?
JS除了已经提供的内置对象外,也可以自定义对象。
JS 通过对象形式将数据进行封装,首先对对象进行描述,通过函数来完成。
例:
function Person() //很象java中的构造函数
{ }
var p = new Person();
p.name = “shangan”;
p.age = 20;
//定义成员函数
p.run = function()
{
alert(“runtext”);
}
或:
function Person(name,age)
{
this.name = name;
this.age = age;
}
var p = new Person(“zhansan”,20);
对于第一种方法呢,想用什么变量,方法啊什么的在须要什么在定义时使用。
JS用于操作对象的语句
一:with语句
格式:
with(对象)
{ }
应用:当调用一个对象中多个成员时,为了简化调用,避免“对象。”这种格式的重复书写。
var p = new Person(“zhangsan”,20);
alert(p.name+p.age);
可以写成:
with(p)
{
alert(name+age);
}
二:for ( in )
格式:
for (变量 in 对象名)
{
}
例:
var arr = {3,2,4,1};
for (x in arr)
{
alert ( arr[x] );
}