接下来看一看对象和数组,首先创建对象来说,用最简单的方式就是使用对象直接量。对象直接量是一个表达式,表达式每次创建都创建并初始化一个新的对象。
第二种方法是用new创建一个新的对象,还有一种方法用object.create()方法这是一个静态函数,只需要传入原型对象就可以。下面是3个分别创建的例子:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
var a={}; //没属性的对象 var b={x:1,y:1}; //两个属性的对象 var c={"x y":"jk",} //属性名中有空格、“-”字符的要用字符串表示 var d=new Object(); //创建一个新的空对象和a一样 var e=new Array(); //创建一个数组对象 var f=Object.create({x:1,y:1}); //f继承了x y属性 var g=Object.create(null); //没有任何的属性和方法,基础方法也没有(比如toString) var h=Object.create(Object.prototype); //空对象和a,d一样
同时可以通过原型来创建新对象,可以模拟原型继承,这样对象就可以继承。这个东西貌似还挺有用的。下面有一个抄来的例子可以返回一个继承的新对象:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
//返回了一个继承自原型对象p的属性的新对象 function inherit(p){ if(p==null) throw TypeError(); if(Object.Create) return Object.create(p); var t=typeof p; if(t!=="object"&&t!=="fuction") function f() {}; f.prototype=p; return new f(); }
查询和设置很简单就是通过(.)或者([])来获取设置值。用点的话就和平常的C#是一样的,只能访问固定属性,用方括号的话里面是一个计算结果为字符串的表达式,可以在程序运行时创建和修改他们。当想查询对象中没有的属性的时候会返回undefined。
删除也就是通过delete来删除,但是只能删除自身属性,不能删除继承属性(如果要删除继承属性就要去原型上删除它,但这会影响很多)。
如果判断是否一个属性在某个对象中就用in运算符(查看对象的自有或继承的属性),hasOwnProperty()(查看自有属性)和propertyIsEnumerable()(查看自有且可枚举属性-枚举属性的话就是代码里面给对象添加的属性是可以枚举的,对象继承的内置方法是不可枚举的)来检测。
JS的对象中也有getter()和setter()的存取器(不过貌似应该不怎么用吧,好吧我不知道):
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
var o={ x:1, //普通属性 //带get和set的存取器 getter a{...}, setter a(value){...}, }
对象还可以通过JSON来序列化和反序列化,一般用的是JSON.stringify()和JSON.parse()来序列化和反序列化,或者还可以用eval()来解析JSON的字符串,下面写了几个简单的例子:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
var a={x:1,y:2}; var b=new Date(); var c={x:1,y:2,z:3}; var d=JSON.stringify(a); console.log(JSON.stringify(a)); //只能序列化可枚举的自有属性 console.log(b.toJSON()); //结果是ISO格式的日期字符串 console.log(JSON.stringify(c,["y"])); //可以过滤你不想要的属性 console.log(JSON.parse(d)); //反序列化自有属性 var e=eval("("+d+")"); //用eval()来解析JSON的字符串 console.log(e);
上面的例子的输出结果为:
————————————————华丽的分割线——————————————————
上面说了一些对象的东西,然后再是数组,首先还是创建,创建数组和对象其实没有什么很大的区别,最多就是用[]来代替{}或者可以var a=new Array();来创建。数组中可以使用不同的元素比如:var a=[1,true,"jk",]而且可以有可选的结尾逗号,所以a只有3个元素。
数组是通过[]来访问和读写这个数组的某个元素的,比如var a=b[0];(读)var b[0]=1;(写),JS中可以使用负数和非整数来索引数组,和对象一样,如果想查询数组中没有的属性的时候同样会返回undefined。
数组添加的话最简单的方法就是赋值:var a=[];a[0]="1";或者用push()或者unshift()的方法在末尾或者头部添加。其实数组有很多的方法,下面有一些简单例子:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
var a=["1",1]; a[1]=2; a.push(3,4); //在尾部加入元素 a.pop(); //删除尾部第一个的元素 a.unshift("-1",0); //在头部加入元素 a.shift(); //删除头部第一个元素 console.log(a); //[0,'1',2,3] var b=a.join("-"); //将元素转化为字符串并连接在一起 console.log(b); //1-2-3 var c=a.reverse(); //颠倒元素顺序 console.log(c); //[3,2,'1'] var d=c.sort(); //元素排序 console.log(d); //['1',2,3] var e=d.concat(4,5,[6,7]); //连接数组 console.log(e); //['1',2,3,4,5,6,7] var f=e.slice(0,2); //这个表示从第一个参数位置开始到第二个参数(不包含第二个参数)结束的所有数组元素 var g=e.slice(-3,-1); //如果是负数,则是表示相对于数组最后一个元素的位置 console.log(f); //['1',2] console.log(g); //[5,6] var h=e.splice(3,2); //删除第一个参数位置开始的第二个参数的个数 var i=e.splice(3,0,[4,5]); //插入第一个参数位置开始的第三个参数的元素 console.log(h); //[4,5] e是['1',2,3,6,7] console.log(e); //['1',2,3,[4,5],6,7] var j=e.indexOf(2); //搜索整个数组的具有给定值的元素,返回第一个元素的索引,从第一个开始搜索 var k=e.lastIndexOf(6); //和上面一个一样 只不过是从最后一个开始搜索 console.log(j); //2 console.log(k); //5
遍历数组就是通过for的方法来遍历。这个很简单:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
var a=["1",1]; for(var i=0;i<a.length;i++){ console.log(a[i]); } for(var i in a){ console.log(a[i]); }
最后在字符串中,也可以像类似于数组的访问,使得其更加方便:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
var s=test; s.charAt(0); //"t" s[1] //"e"
对象和数组我觉得这点东西是比较基础的一些知识,然后接来下就是要看函数、类了。