构成JavaScript完整实现的各个部分:
JavaScript的核心ECMAScript描述了该语言的语法和基本对象
DOM描述了处理网页内容的方法和接口
BOM描述了与浏览器进行交互的方法和接口。
ECMAScript基础
语法:区分大小写,弱类型,每行结尾的分号可有可无,注释与C相同。
var test="hi";
var age=25;
变量可以存放不同类型的值
var test="hi";
alert(test);
test=55;
alert(test);
ECMAScript有5种原始类型,即:undefined,null,boolean,number,string
并提供了typeof运算符来判断某一个变量属于哪一个类型。
var iNum=10;
alert(iNum.toString(2));//二进制字符串
alert(iNum.toString(8));//八进制字符串
alert(iNum.toString(16));//十六进制字符串
2.转换成数字
var iNum1=parseInt("1234adf");//1234
var iNum2=parseInt("0xA");//return 10;
var iNum1=parseInt("AF",16);//解析十六进制的值
另外还有函数parsefloat("1234.lll");
3.强制类型转换
Boolean,Number,String
var s1=string(null);
var n2=Number("56");
4.引用类型
var o=new Object();
Number类
var oNumberObject=new Number(55);
var iNumber=oNumberObject.valueOf();
String类
<script type="text/javascript">
//创建一个String对象
var oStringObject=new String("hello world");
//string对象的valueOf和toString方法都返回String型的原始值
alert(oStringObject.valueOf()==oStringObject.toString());
//length属性
alert(oStringObject.length);
//charAt()得到单个字符,charCodeAt()得到单个字符的代码
alert(oStringObject.charAt(1));
alert(oStringObject.charCodeAt(1));
//concat()用于把一个或多个字符串连接到string对象原始值上,保持原始的string对象不变.
var s1="hello";
var s2=s1.concat(" world");
alert(s2); //hello world
alert(s1); //hello
var s3=s1+" world!!"; //也可以用+号连接字符串
alert(s3); //hello world!!
//indexOf()与lastIndexOf()返回指定子串在另一个字符串中的位置
alert(oStringObject.indexOf(o));//从字符串的开始检索
alert(oStringObject.lastIndexOf(o));//从字符串的结尾检索
//localCompare()按照字母顺序比较
s1=new String("yellow");
alert(s1.localCompare("brick"));//1
alert(s1.localCompare("yellow"));//0
alert(s1.localcomparre("zoo"));//-1
//slice()与substring()都返回字符串中的子串,第一个参数为起始位置,第二个参数为终止位置。
alert(oStringObject.slice(3));//lo world
alert(oStringObject.slice(3,7));//lo w
alert(oStringObject.substring(3));//lo world
alert(oStringObject.substring(3,7));//lo w
//对于负数参数,slice()会用字符串的长度加上参数,substring()则将其作为0处理
alert(oStringObject.slice(-3));//rld
alert(oStringObject.substring(-3));//hello world
//toLowerCase(),toLocalLowerCase(),toUpperCase(),toLocalUpperCase()大小写转换
//instanceof运算符
alert(oStringObject instanceof string);//oStringObject是否为string类型的实例
///////////////////////////
//delete运算符
var o=new Object();
o.name="nicholas";
alert(o.name);
delete o.name;//删除对以前定义的对象属性或方法引用
alert(o.name);
////////////////////////////////////////////////////
//void运算符
<html>
<head>
<script type="text/javascript">
</script>
</head>
<body>
//当点击后将会在屏幕上出现object window字样
<a href="javascript:window.open('about:blank')">click me</a>
//void运算符对任何值都返回undefined.避免输出不应该输出的值
<a href="javascript:void(window.open('about:blank'))">click me</a>
</body>
</html>
/////////////////////////////////////////////////////
//函数
function sayhi(name,message){
alert("hello"+name+","+message);
}
sayhi("che","ni hao");
//如何函数没有明确的返回值,则它真正的返回的值是undefined
//函数不能重载,
//arguments对象,无需明确指出参数名就能访问他们
function sayHi(){
if(arguments[0]=="bye")
document.write("bye");
document.write(arguments.length+"");
}
sayHi("bye",1,1,1,1);
//arguments对象还可检测传递给函数的参数个数,如上所示
</script>
对象基础-----------------------------------
1.本地对象:Object,Array,String,Number,Date,RegExp,Function
2.Array方法:join(),split(),slice(),push(),pop(),shift(),unshift(),sort(),reverse()
join("连接符")将数组转换成字符串输出,split()将字符串转换成数组
shift()将删除数组的第一个项,将其作为函数值返回。unshift()把一个项放在数组的第一个位置,然后把其它的向后移动
slice()方法返回具有特定项的新数组,接受一个或两个参数,即要提取的项的起始位置和结束位置。
3.Date()
<script type="text/javascript">
//创建Date对象
var d=new Date();
var d=new Date(0);
var d=new Date(Date.parse("May 25,2004"));
var d=new Date(Date.UTC(2004,1,5));
var d=new Date();
alert(d.toDateString());
alert(d.toTimeString());
//////////////////////////////////////////////
//内置对象
//只定义了两个内置对象,即Global,Math
//Global对象,isNaN(),isFinite(),parseInt(),parseFloat(),
//encodeURI()用于处理完整的URI,encodeURIComponent()用于处理URI的一个片断
var sUri="http://www.baidu.cn/illegal value.htm#start";
alert(encodeURI(sUri));
alert(encodeURIComponent(sUri));
//decodeURI()与decodeURIComponent()恰与对应的上面的方法相反
//最后一个方法是最强大的方法eval()
//该方法就像是整个ECMAScript的解释程序,接受一个参数,即要执行的JavaScript字符串
eval("alert('hi')");//alert("hi");
eval("function sayHi(){alert('ddd');}");
sayHi();
//这种功能极其强大,也极其危险,恶意用户可能会插入对站点有安全的代码即代码注入
//Global的属性:undefined,NaN,
//Math对象,random()方法
var iNum=Math.floor(Math.random()*10+1);
//ECMAScript中的所有对象的所有属性和方法都是公用的。所有属性和方法默认都是公用的。
//函数是对象,对象可以有属性和方法
function sayHi(){
alert("hi");
}
sayHi().alternate=function(){
alert("hola");
};
sayHi();
sayHi.alternate();
//关键词this
function showColor(){
alert(this.color);
}
var car1=new Object;
car1.color="red";
car1.showColor=showColor;
var car2=new Object;
car2.color="blue";
car2.showColor=showColor;
car1.showColor();
car2.showColor();
//定义对象和类
//工厂方式
function showColor(){
alert("this.color");
}
function createCar(sColor,iDoors,iMpg){
var oTempCar=new Object;
oTempCar.color=sColor;
oTempCar.doors=iDoors;
oTempCar.msg=iMsg;
oTempCar.showColor=showColor;
return oTempCar;
}
var oCar1=createCar("red",4,23); //一个对象
var oCar2=createCar("blue",3,25); //另一个对象
//混合的构造方式/原型方法
//用构造方法定义对象的所有非函数属性,用原型方法定义对象的函数属性。
function Car(sColor,iDoors,iMpg){
this.color=sColor;
this.doors=iDoors;
this.mpg=iMpg;
this.drivers=new Array("Mike","Sue");
}
Car.prototype.showColor=function(){
alert(this.color);
}
var car1=new Car("red",4,23);
var car2=new Car("blue",4,23);
//给对象创建新的方法
//可以使用prototype属性为任何已有的类定义新方法
Number.prototype.toHexString=function(){
return this.toString(16);
}
//重定义已经存在的方法
Function.prototype.originalToString=Function.prototype.toString;
Function.prototype.toString=function(){
if(this.originalToString().length>100)
return "function too long to display.";
else
return this.originalToString();
}
//////////////////////////////////////////////////////////////
//继承,暂时不学它。
</script>
//第五章,浏览器中的JavaScript
<script language="JavaScript" src="external.js"></script>
<script type="text/javascript">
//大量的javascrip代码不应该内嵌在HTML文件中,因为:安全性,代码维护,缓存
</script>