当前位置: 首页 > 图文教程 > 网络编程 > Javascript > Javascript入门学习第四篇 js对象和数组

Javascript
用JavaScript实现浏览器地震效果
Javascript实例教程(8) 利用Javascript基于浏览器类型的重定向
Javascript实例教程(14) 鼠标触发窗口
使主页呈现“飞舞”特效
Javascript实例教程(21) OLE Automation(1)
Javascript实例教程(13) 鼠标移过时报警
Javascript实例教程(10) 随机显示图片
Javascript实例教程(2) 创建弹出式窗口
JavaScript 小技巧(第十集)
Javascript实例教程(3) 创建折叠式导航菜单
Javascript实例教程(7) 利用Javascript进行密码保护
完美解决一个事件激活多个函数(2)
Javascript模拟游戏中的弹出菜单效果
Javascript实例教程(6) 在一个表单中设置和检查Cookies
JavaScript 小技巧(第八集)
Javascript实例教程(4) 探测浏览器插件
JavaScript 小技巧(第九集)
JavaScript学习:基础继承机制
初学Javascript之cookie篇(译)
让弹出窗口变得“体贴”一些(javascript)

Javascript入门学习第四篇 js对象和数组


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-12   浏览: 79 ::
收藏到网摘: n/a

上篇文章讲了js中的变量,表达式,和运算符 还有一些 js 语句. 这章我们来探讨js中的对象和数组。
比较难哦。做好心里准备吧。。。。。。 深呼吸。。。
1 , for / in :
一种遍历(枚举)对象属性的方法,可以循环我们呢事先不知道的属性。
它可以枚举处用户定义的所有属性,但却不能枚举出某些预定义的属性和方法。
不能枚举的属性通常是继承的属性
删除一个对象的属性:
delete book.width ;
从对象中移除了属性,在删除之后,用for/in将不会枚举该属性,并且用width in book 也检测不到该属性。
for/in 的另一个重要的用途就是跟关联数组一起使用:(如果忘记关联数组的定义,可以看前面的章节。)
for(stoct in port ){
value + = get_value(stoct) * port[stoct] ;
}
2 , 通用的Object属性和方法:
1):constructor属性:
每个对象都有这个属性,他引用了初始化这个对象的构造函数。
比如:
var d =new Date(); //使用Date()构造函数,创建一个对象 d;
d.constructor ==Date; //true //属性d.constructor引用 Date ;
这个属性有助于确定一个对象的类型;
比如:
我们想确定一个值的类型是否是Date 类型:
If((typeof o==”object” )&& (o.constructor==Date)){
// 首先看是否是对象,然后看是否引用Date
}
上面的代码也可以写成:
If((typeof o==”object” )&& (o instanceof Date)){
// instanceof 运算符 来检测o.constructor 属性的值。
}
3 , toStirng()和toLocaleString()方法:
1):toLocaleStirng() 返回对象的一个本地化字符串。
toString和toLocaleString一般都返回相同,但在子类中,有点区别:
比如:
Array , Date和Number都定义了返回本地化的值的toLocaleString()方法.
4 , hasOwnProperty()和propertyIsEnumerable()方法:
1):hasOwnProperty
var a = { x : 1 , y : 2};
var k =a.hasOwnProperty("x");
alert(k) //true
alert( Math.hasOwnProperty("z") );//false
alert( Math.hasOwnProperty("cos") );//true
注:Math,cos() : 以弧度为单位计算并返回指定角度的余弦值。
propertyIsEnumerable()跟返回的结果跟hasOwnProperty()相同;
4 ,isPrototypeOf()方法:
如果方法所属的对象是参数的原型对象。
var a = { x : 1 , y : 2};
var k1= Object.prototype.isPrototypeOf(a); // o.constructor = Object
var k2= Object.prototype.isPrototypeOf(Function); // Function.constructor = Object
alert(k1) //true
alert(k2) //true
5,数组:
1)创建数组:
数组直接量:
var es = [ ] ;
复杂点 var es = [ [ 1, {x:1 , y : 2}] , [ 2, {x:3 , y : 4}] ];
还有一种方式:使用Array() 构造函数:
V1 : 无参数:
var a = new Array();
空数组,和 var a =[ ] 相等 ;
V2 : 多个参数:
var a = new Array( 1,2,3,”tt”) ; //可以看出直接量定义 简单些。
V3 : 1个数字参数:
var a = new Array (3);
具有3个元素的数组,每个元素的值为 undefined ;
6, 数组的下标(索引):
大小 : 0 <= 下标 < 2的32次方 – 1 ;
如果不在范围内,js会讲它转换为一个字符串,作为对象属性的名称;
而不是作为数组的下标;
比如:
a[-1.2] = “test” ; // 等价于 a[“-1.2”] =”test” ;
//代码解释: 创建一个名为 “-1.2”的属性,而不是定义一个 新的数组元素。
上篇文章讲了js中的变量,表达式,和运算符 还有一些 js 语句. 这章我们来探讨js中的对象和数组。
7, 添加数组的内存使用:
a[10] = “test” ; //添加新的元素
内存的使用:
比如:
a[0] = “1” ;
a[10] =” 10” ;
那么js值给下标为0 和10的元素分配内存,中间的9个元素不被分配;
注:数组也可以添加到对象中;
比如;
var a = new Circle(1,2,3);
a[0]= “test” ;
这个例子定义了一个名为” 0 “的新对象属性。
只将数组元素添加到一个对象中并不会使它成为数组。
8, 删除数组:
var a = [1,2];
delete a[0];
alert(a[0]) //输出 undefined
alert(a[1]) //输出 2
由例子可以看出,delete删除其实没有真正删除,只不过把元素设置为undefined;
如果要真正删除,可以使用Array.shift(),等方法。
比如:
var a = [1,2];
delete a[0];
alert(a[0]) //输出 undefined
alert(a[1]) //输出 2
a.shift(); //删除数组的第一个元素
alert(a[0]) //输出 2
alert("length:"+a.length);
alert(a[1]) //输出 undefined ; 1已经被删除了,其实数组已经的长度只有 1 了;
9,数组的length:
a[49] = “a”;
// 那么这个数组的长度是 50 ;
length属性经常用于遍历数组元素;
比如:
var a = [“a” , “b “ ,”c” ];
for(var i = 0 ; i< a.length ; i++){
alert(a[i]);
}
这个是在假定元素是连续的,如果不是这种情况:
必须检测每个元素是否被定义 : 比如:
for(var i = 0 ; i< a.length ; i++){
if(a[i]){
alert(a[i]);
}
}
多维数组: a[i][j] ;

10,数组的一些方法:
1):join() 方法:
把一个数组的所有元素都转换成字符串。
比如:var a = [1,2,3];
var s = a.join(); // 输出 s==1,2,3
当然也可以 指定一个分隔符;
比如;
s = a.join(“,”);
这个方法跟String.split()相反, split()将一个字符串分割成几个片段来创建数组;
2):reverse () 方法:
把一个数组颠倒。
var a = new Array(1,2,3);
a.reverse();
var s = a.join(); //s == “3,2,1”
3):sort() 方法:
排序
♂:如果不给传参数,那么按照字母顺序对数组元素排序。
var a = new Array(“ee”,”df”,”b”);
a.sort()
var s = a.join(“, ”); // s == “b, df, ee”
♂:如果传参数:
比如:
var a = [33,4,1111,222]
a.sort(); // 排序 : 1111 ,222 ,33,4
a.sort(function(x,y){
return x-y;
});
var s = a.join(); //输出 4, 33,222,1111
//可以从例子看出,排序如果x > y ,那么第一个参数就排在第2个参数后,
比如; 1111 ,222 -? 1111-222>0 -? 则 222 , 1111
另外注意下 字母排序:因为js是区分大小写,所以排序的时候,把字符统一成大写或者小写,再排序。
4):concat() 方法:
var a = [1,2,3];
a= a.concat(4, [5,6],7);
a=a.join(); //输出 1,2,3,4,5,6,7
alert(a)
注意:
如果是数组里面还有数组 ,就不能展开了。
比如:
var a = [1,2,3];
a = a.concat(4,[5,[6,6]],7);
alert(a); //这个看不出来
a = a.join("|");
alert(a); //分割后,注意有个逗号
-------------------------------------
var c = [1,2,3];
var d =new Array(1,2,3);
alert(c); //1,2,3
alert(d); //1,2,3
//之所以不输出Object ,是因为
//数组是一个具有额外功能层的对象.
//我们记住他的特殊性。
5):slice() 方法:
返回数组某一个片段。跟字符串的substring方法类似。
6):splice() 方法:
首先他跟 slice 方法 只有一个字母的差别,不过用处完全不同。
他可以用来删除。
var a = [1,2,3];
a = a.splice(0,2);
alert(a); // 输出 1, 2
a = a.splice(1,2);
alert(a); // 输出 2 。 如果是 a = a.splice(0 , 1) ; 输出 1
a = a.splice(1,2);
alert(a); // 没有删除任何数组 , 输出 空 数组
他也可以插入数组。具体方法:
var array1 = new Array("1","2","3","4");
array1.splice(1,0,"5");//在 第2个元素后面,插入 5 ; 如果第2个参数为0,则不删除。
document.write(array1+"<br>"); //输出 1, 5 ,2 ,3,4
array1.splice(2,3,"7","8") // 删除 第3个的 元素后的 3个元素。也就是 第3个,第4个,第5个元素。然后在这个位置上插入7,8
document.write(array1);//输出 1, 5 ,7,8
注意:和concat()不同,splice并不将他插入的参数展开。也就是如果插入一个数组,他就是插入数组本身,还不是数组的元素。
而concat()插入数组的话,就会把数组展开,插入数组中的元素,不过当插入的数组里
还有数组的时候,就不会展开了。

7):push() 方法和pop()方法:
push(): 将一个或者多个数组 附加到数组的尾部。
pop() : 删除数组的最后一个元素。
var array1 = new Array("1","2","3","4");
array1.push("5");
document.write(array1+"<br>"); //输出 1, 2 ,3 ,4,5
array1.pop()
document.write(array1);//输出 1, 2 ,3 ,4
8):unshift() 方法和shift ()方法:
跟push和pop唱反调。。。
unshift (): 将一个或者多个数组 附加到数组的头部。
shift ():删除数组的第一个元素。

数组的一些方法是比较多,看起来也比较烦。所以大家应该有点耐心。
另外可以参考这篇文章;
http://www.cssrain.cn/article.asp?id=438

总结:这章主要讲了对象和数组的一些方法。比较难记和难理解。不过任何事情都是从难到容易的过程。一次没看懂,再看一次。。。书读百遍,其意自现。。。。。。
也许你不需要读一百遍呢. ^_^。

是不是感觉看了这么多js概念,已经迫不及待的想自己写点例子什么的。好吧。
下章我们 来点实战的。。。。
如果还有不懂,可以google 搜索资料. (