JS学习专辑(5) 对象和数组

接下来看一看对象和数组,首先创建对象来说,用最简单的方式就是使用对象直接量。对象直接量是一个表达式,表达式每次创建都创建并初始化一个新的对象。

第二种方法是用new创建一个新的对象,还有一种方法用object.create()方法这是一个静态函数,只需要传入原型对象就可以。下面是3个分别创建的例子:

View Code
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一样

同时可以通过原型来创建新对象,可以模拟原型继承,这样对象就可以继承。这个东西貌似还挺有用的。下面有一个抄来的例子可以返回一个继承的新对象:

View Code
//返回了一个继承自原型对象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()的存取器(不过貌似应该不怎么用吧,好吧我不知道):

View Code
var o={
  x:1,  //普通属性

  //带get和set的存取器
  getter a{...},
  setter a(value){...},       
}

对象还可以通过JSON来序列化和反序列化,一般用的是JSON.stringify()和JSON.parse()来序列化和反序列化,或者还可以用eval()来解析JSON的字符串,下面写了几个简单的例子:

View Code
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()的方法在末尾或者头部添加。其实数组有很多的方法,下面有一些简单例子:

View Code
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的方法来遍历。这个很简单:

View Code
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]);
}

最后在字符串中,也可以像类似于数组的访问,使得其更加方便:

View Code
var s=test;
s.charAt(0);    //"t"
s[1]    //"e"

对象和数组我觉得这点东西是比较基础的一些知识,然后接来下就是要看函数、类了。

原文地址:https://www.cnblogs.com/socialdk/p/3034785.html