JavaScript数据类型 - Object类型

创建对象一

ECMAScript中的对象其实就是一组数据和功能的集合。对象可以通过执行new操作符后跟要创建的对象类型的名称来创建。而创建Object类型的实例并为其添加属性和方法,就可以创建自定义对象,如下所示:

var o = new Object();
o.name = "Alvin"; //添加属性
//添加方法
o.sayHello = function(){
    console.log("hello "+ this.name);
}

这个语法与Java中创建对象的语法相似,但在JavaScript中,如果不给构造函数传递参数,则可以省略后面的那一对圆括号。也就是说在像前面这个示例一样不传递参数的情况下,完全可以省略那对圆括号(但并不推荐这种做法)

var o = new Object; //有效,但不推荐

仅仅创建一个Object实例其实并没有什么用处,但关键是要理解一个重要思想:即在JavaScript中,Object类型是所有其它实例的基础,在讲继承的时候我们已经讲到:所有其它类型均继承自Object。也就是说Object类型所具有的任何属性和方法,同样也都存在于更具体的对象中。

Object的每个实例都具有如下属性和方法:

  • Costructor:保存着用于创建对象的函数,对于上面的例子而言,构造函数(constructor)就是Object()
  • hasOwnProperty(propertyName):用于检查给定的属性在当前的实例对象(不是在实例原型)中是否存在。其中作为参数的属性名(propertName)必须以字符串形式指定,例如:o.hasOwnProperty("name")
  • isPropertyOf(object):用于检查传入的对象是否是另一个对象的原型
  • propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in语句来枚举。与hasOwnProperty()方法一样,作为参数的属性名必须以字符串形式指定。
  • toLocalString():返回对象的字符串表示形式,该字符串与执行环境的地区对应。
  • toString():返回对象的字符串表示形式。
  • valueOf():返回对象的字符串、数值或布尔值表示,通常与toString()方法的返回值相同。

由于在JavaScript中Object是所有对象的基础,因此所有对象都具有这些基本的属性和方法。

创建对象二

另一种创建对象的方式是使用对象字面量的表示法。对象字面量是对象定义的一种简写形式。目的在于简化创建包含大量属性的对象的过程。看一下下面的例子:

var person = {
    name: "Alvin", //添加name属性
    //添加sayHello方法
    sayHello:function(){
        console.log("Hello "+ this.name)
    }
}

在使用对象字面量时,属性名也可以使用字符串,如下所示:

var person = {
    "name": "Alvin",     
    "Age": 28,
    5: true
}

在这个例子中我们创建了一个person对象,包含三个属性,name、age和5。但这里数值属性名会自动转换为字符串。

另外,使用对象字面量语法时,如果花括号里面的内容为空,则可以在外面动态添加属性或方法,如下所示:

var person = {}; //与new Object()相同
person.name = "Alvin";
person.sayHello = function(){
    console.log(this.name);
}

总结

虽然可以使用前面介绍的任何一种方式创建对象,但平时我们更青睐使用对象字面量语法,因为这种语法要求的代码量少,而且能够给人封装数据的感觉。实际上对象字面量也是向函数传递大量可选参数的首先方式。看下面的例子:

function dispalyInfo(args){
    var output = "";
    if(typeof args.name == "string"){
        output += "Name: " + args.name + "\n";
    }

    if(typeof args.age == 'number'){
        output += "Age: " + args.age + "\n";
    }

    console.log(output);
}

displayInfo({
    name: "Alvin",
    Age: 28
});

displayInfo({
    name: "yannis"
});

这个例子中,函数displayInfo接受一个名为args的参数,这个参数可能带有一个名为name或age的属性,也可能是两个属性都有或者是都没有。在函数内部,通过typeof操作符来检测每个属性是否存在,然后再基于相应的属性来显示信息。

扫描二维码关注公众号,回复: 11607826 查看本文章

一般情况,访问对象的属性时都是使用点表示法,这也是很多面向对象语言的通用方法。但是在JavaScript中也可以用方括号像数组一样来访问属性。在使用方括号时,需将要访问的属性以字符串的形式放在方括号内。如下所示:

console.log(person["name"]);
console.log(person.name);

以上两种方式都是可以的,从功能上看这两种访问方式没有任何区别。但方括号访问的主要有点事可以通过变量的形式来访问属性,例如:

var proName = "name";
console.log(person[proName]); //Alvin

如果属性名中包含会导致语法错误的字符,或者属性名使用的是关键字或保留字,也可以使用方括号形式访问,如:

person["first name"] = "Alvin";

由于"first name"中包含空格,因此不能直接使用点的形式来访问。然而属性名中也可以包含非字母非数字,这时候就可以使用方括号的形式来访问它们了。

通常,除非必须使用变量来访问属性,否则建议使用点表示法。

猜你喜欢

转载自blog.csdn.net/lixiaosenlin/article/details/108335295
今日推荐