JavaScript中的对象
严格来说,javascript并不是真正意义上的面向对象的语言,但是我们在编写javascript的时候仍然有对象一说,javascript虽然算不上真正意义上的面向对象,但是我们依然可以使用面向对象的编程方式,这里紧紧是编程方式与习惯。我本人是不喜欢用javascript做面向对象的复杂操作的。但是在javascript里仍然还是存在对象的,应该说javascript里一切都是对象。在javascript中有3种对象。面向对象的3大特征,继承,封装,多态。javascript其实可以做到模拟这三大特征,以后有时间再讲讲,现在我们先看看javascript中的三种对象吧
1,本地对象
本地对象:独立于宿主环境的ECMAScript实现提供的对象。这句话我们可以理解为由ECMAScript提供的,与浏览器无关的对象。其实这里的解释有点牵强,能宿主javascript的不单单是浏览器,但是我们这里只谈浏览器,所以这里为了方便理解就理解成:宿主环境=浏览器吧
那么本地对象有哪些,其实就是我们一直用到的基本对象,比如String,Boolean,Numebr,Object,Function,Array等等。这里介绍一点点关于对象的创建,销毁等问题。我们知道javascript属于弱类型,所以我们如果想要实例化一个对象可以这样
var oObject = new Object();
这里需要注意的一点是,javascript虽然是弱类型语言,但是本质上依然存在引用类型一说,我们这里的oObject依然存储的是类型指针。就是存储的实际上是指向Object的引用。javascript跟.net CLR一样有垃圾收集器,即无引用对象销毁,我们可以不必手动销毁对象,但是也仍可以手动销毁,手动销毁只需要把对象的引用设置为null。但是一定要注意,要确保所有的对象都不存在引用。否则讲会引发object未定义的异常。
我们来看看比较重要的几个本地对象,先看看Array对象,创建一个Array非常简单,有以下的几种方式
1 var aArray = new Array(); //这里不指定初始大小
var aArray = new Array(20); //这里指定初始大小为20的数组
var aArray = new Array("Hello","World"); //这里也可以直接赋值。
2 var aArray =["","",""]; //第二种初始化的方式是直接用值初始化数组。这是一种简写的方式
数组的访问和赋值也是很简单的,使用下标访问和赋值,下标从0开始,到length-1结束,所以我们这里可以使用下列代码访问或者赋值
aArray[0]="Hello";
var oString =aArray[0];
这里我们可以动态的添加元素进数组,比如这里我们定义一个数组
var aArray = new Array("Hello","World");
这个数组的长度是2,我们可以用Length属性判断。然后我们可以给数组下标为2的元素赋值
aArray[2]="Edrick";
当我们再使用length的时候会发现数组的长度增加为3,那么如果我们给下标为25的数组元素赋值呢?
aArray[25]="Edrick";
我们可以用toString()方法查看,toString()方法会把数组的所有元素组合成字符串,元素之间使用逗号间隔。我们会发现下标3-24的所有元素都为null.
数组还有两个方法返回以,号相隔的字符串方法
1 valueOf()
2 toLocaleString()
这里的三个方法都是返回的,号相隔,如果我们想返回的字符串不想以逗号相隔,而是想以我们自定义的任何符号相隔呢,方法join方法可以做到
<script type="text/javascript">
window.onload = function () {
var aArray = ["Hello", "World","Edrick"];
alert(aArray.join("----"));
}
</script>
这里就可以使用任何我们自定义的符号相隔了
在Array和String之间能够互相转换,这对我们来说就是非常有用的功能
window.onload = function () {
var ostring = "Hello,World,Edrick";
var oarray = ostring.split(",");
alert(oarray.length);
alert(oarray[0]);
alert(oarray[1]);
alert(oarray[2]);
}
下面来看看另外的两个方法
concat() //将制定元素附加到数组的结尾
window.onload = function () {
var oarray = ["Hello", "World", "Edrick"];
var oarray1 = oarray.concat("good", "afternoon");
alert(oarray1);
}
指定的元素会添加到数组的末尾,返回的是新的数组
slice()方法返回制定下标的新数组
window.onload = function () {
var oarray = ["Hello", "World", "Edrick", "good", "afternoon"];
var oarray1 = oarray.slice(1);
var oarray2 = oarray.slice(1, 4);
alert(oarray1);
alert(oarray2);
如果只制定了一个参数,则返回第“参数1”后所有的元素,不包括“参数1”。如果指定了两个元素,则返回“参数1”-“参数2”之间的所有元素,不包括“参数1”“参数2”
Arrya支持栈结构,即“后进先出”,为了支持这种结构,Array提供了两个方法
push() //将一个或者多个元素添加到数组的结尾
pop() //删除最后一个数组项
window.onload = function () {
var oarray = new Array();
oarray.push("Hello");
oarray.push("World");
oarray.push("Edrick");
alert(oarray.toString());
var item = oarray.pop();
alert(item);
alert(oarray);
pop()方法会将删除的元素返回,这个方法不会返回新的数组,push也不会,但是上面提到的concat方法却是会返回新数组。
数组能够操作最后一项,当然也可以操作第一项
unshift() //将元素放在数组的第一项,其他元素向后挪,返回数组的新length
shift() //删除数组的第一个元素,其他元素向前挪,返回删除的元素
数组提供sort()方法对数组进行排序,如果数组为字符串数组,会直接根据首字母进行排序,如果是数字,则把数字转换为字符串然后比较字符代码
最后看看数组的一个有点复杂的方法splice()
oarray.splice(0,2) // 从0开始,删除两项
oarray.splice(2,0,"arg1","arg2") //从2开始,删除0个,插入"arg1",和"arg2"
oarray.splice(2,2,"arg1","arg2") //从2开始,删除2个,插入"arg1",和"arg2"
Data对象
data对象即是我们使用的时间,实例化data对象也很容易
var odata = new Data();
实例化Data的时候,我们可以使用距离1970年1月1日凌晨12点的毫秒数,也可以不传入任何参数得到现在的时间,更可以传入特定格式的字符串,一般支持下面的两种日期格式
mm/dd/yyyy(11/04/2011);
mmmm dd,yyyy(January 12,2004);
我们像这样实例化,只能得到日期,得不到时间。
也可以使用UTC实例化
var odata = new Date(Date.UTC(2011,10,4,13,5));
需要注意的一点是,这里设置的月份的时候需要用现有的月份减去1,也就是说,12月就是11,1月就是0,后面也可以设置小时,分钟,秒钟。同样,也可以直接去掉Data.UTC直接实例化data的时候加参数var odata = new Date(2011,10,4,13,5);
下面来看一下data的一些属性和方法
toDataString() //以实现的特定的格式显示Data的日期部分(即只有月/日/年)
toTimeString() //以实现的特定格式显示data的时间部分(即小时,分,秒,和时区)
toLocaleString() //以地点特定的格式显示data的日期和时间
toLocaleDataString() //以地点的特定格式显示data的日期部分
tolocaelTimeString() // 以地点的特定格式显示data的时间部分
toUTCString() //以实现的特定格式显示data的UTC时间
getTime() //返回日期的毫秒表示
setTime(millidseconds) //设置日期的毫秒表示
getFullYear() //返回用4位数字表示的日期的年份
getUTCFullYear() //返回用4位数字表示的UTC日期的年份
setFullYear(years) //设置日期的年份,参数必须是4位数字的年份值
setUTCFullYear(years) //设置UTC日期的年份,参数必须是4位数字的年份值
getMonth() //返回日期的月份值,有数字0到11表示
getUTCMonth() //返回UTC日期的月份值,有数字0到11表示
setMonth(months) //设置日期的月份为大于等于0的月份,对于大于11的月份,累计年份
setUTCMonth(months) //设置UTC日期的月份为大于等于0的月份,对于大于11的月份,累计年份
getDate() //返回该日期该月中的某天
getUTCDate() //返回UTC日期该月中的某天
setData(date) //设置该日期该月中的某天
setUTCDate(date) //设置该UTC日期该月中的某天
getDay() //返回该日期为星期几
getUTCDay() //返回该UTC日期为星期几
setDay(days) //设置该日期为星期几
setUTCDay(days) //设置该UTC日期为星期几
getHours() //返回日期中的小时值
getUTCHours() //返回UTC日期中的小时值
setHours() //设置日期中的小时值
setUTCHours //设置UTC日期中的小时值
getMinutes() //返回日期中的分钟值
getUTCMinutes() // 返回UTC日期中的分钟值
setMinutes(minutes) //设置日期中的分钟值
setUTCMinutes(minutes) //设置UTC日期中的分钟值
getSeconds() //返回日期中的秒值
getUTCSeconds() //返回UTC日期中的秒值
setSeconds(seconds) //设置日期中的秒值
setUTCSeconds(seconds) //设置UTC日期中的秒值
getMilliseconds() //返回日期中的毫秒值
getUTCMilliseconds() //返回UTC日期中的毫秒值
setMilliseconds(seconds) //设置日期中的毫秒值
setUTCMilliseconds(seconds) //设置UTC日期中的毫秒值
内置对象
内置对象即由javascript实现的对象,不依赖于宿主,我们不必实例化内置对象,因为它已经在javascript加载的时候被javascript实现。我们只需要直接使用。
Global对象
先看看Global比较有用的几个属性
encodeURI() //编码传递给浏览器的URI(编码无效字符)
encodeURIComponent() //处理URL的一个片段。
decodeURI() //对应的解码
decodeURIComponent()对应的解码
eval(""); //要执行的javascript代码
undefined //Undefined类型的字面量
NaN //非数的专用数值
Infinity //无穷大的专用数值
Object //Object的构造函数
Array //Array的构造函数
Function //Function的构造函数
Boolean //Boolean的构造函数
String //String的构造函数
Number //Number的构造函数
Data //Data的构造函数
RegExp //RegExp的构造函数
Error //Error的构造函数
EvalError //EvalError的构造函数
RangeError //RangeError的构造函数
ReferenceError //ReferenceError的构造函数
SyntaxError //SyntaxError的构造函数
TypeError //TypeError的构造函数
URIError //URIError的构造函数
Math对象
数学对象,用于数学计算
E //值e,自然对数的底
LN10 //10的自然对数
LN2 //2的自然对数
LOG2E //以2为底E的对数
LOG10E //以10为底E的对数
PI //值π
SQRT1_2 //1/2的平方根
SQRT2 //2的平方根
min() //判断一组数中的最小值
max() //判断一组数中的最大值
abs() //返回数字的绝对值
ceil() //总是向上舍入数字
floor() //总是向下舍入数字
round() //标准的舍入函数
Math对象最有用的方法我觉得就是random().该方法返回0-1之间的随机数
var number = Math.floor(Math.random()*total_number+first_value);
1-10之间的随机数
var number = Math.floor(Math.random()*10+1);
宿主对象
由宿主环境提供的对象。比如window,location,navigate,history等等。
This关键字
关键字this总是指向调用该方法的对象
this总是指向调用该方法的对象而不是指向变量名.

浙公网安备 33010602011771号