Javascript学习第一季(4)
上篇文章讲了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”的属性,而不是定义一个 新的数组元素。 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 ); } 这个是在假定元素是连续的,如果不是这种情况: 必须检测每个元素是否被定义 : 比如: for(var i = 0 ; i< a.length ; i++){ if(a){ alert(a); } } 多维数组: a[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 搜索资料. ( 或者联系我 ,可以去我的blog 给我留言 : http://www.cssrain.cn/LoadMod.asp?plugins=GuestBookForPJBlog |
---|
第一季(4)
最新推荐文章于 2021-06-10 17:55:23 发布