Javascript的对象


Javascript是一门很灵活多变的语言,也是一门面向对象的语言。在JS的世界里,有“函数是一等公民”“一切皆对象”的说法。

在JS里,对象指的是可变的键控集合。Javascript里有Number,Array,Function,Object,Boolean,Regex,String,Undefined,Null九种类型。在这里面,Array,Function,Object,Regex是对象。

对象是无类型的,并且可以嵌套。对象所包含的是一组名值对的集合,这里的“名”也称作属性,“值”又称作属性值。

那么,我们如何创建一个对象呢?我们该如何使用对象呢?现在我们来一一解答


创建对象

关于如何创建一个对象,一般熟悉Javascript的人能够回答上来两种方法:

第一种:

var newObj = new Object();

第二种:

var newObj = {};

但是,Javascript还为我们提供了第三种创建对象的方法,那就是Object.create()方法:

var newObj = Object.create({});

对象字面量(对象的属性存储)

在Javascript的对象里,我们采用对象字面量的方式来存储名值对到对象里:

var newObj = {
    key1: 'value1',   //如果值是String类型必须用引号包含
    key2: 123     //如果值是Number类型,那么不用引号
};

当然,我们属性名和属性值的格式也可以采用JSON的格式:

var newObj = {
    "key1": "value1",
    "key2": 123
};

关于属性名的格式,如果属性名里包含了短横线,那么,属性名必须使用引号包含,但是,如果是包含的下划线,那么,可以不使用引号包含,比如:

var newObject = {
    key1_name: 'name1',
    'key2-name': 'name2'
};

对象是可以嵌套的:

var newObj = {
    name: 'Erichain',
    info: {
        sex: male,
        age: 21
    }
};

对象的属性值可以是任意的数据类型:

var newObj = {
    newStr: 'this is a string', //String
    newNumber: 123, //Number
    newBoolean: true, //Boolean
    newArray: [1, 2, 3], //Array
    newFunction: function () {} //Function
    //and so on...
};

对象属性的查找与检索

与其它的语言(比如Java,C等)类似,Javascript里的属性查找可以使用小数点的方式:

var newObj = {
    name: 'Erichain',
    age: 21
};

console.log(newObj.name);
>> Erichain

也可以使用[属性名]的方式:

var newObj = {
    name: 'Erichain',
    age: 21
};

console.log(newObj['name']);
>> Erichain

同样的,使用小数点的方式访问属性的时候,属性名不能是数字,或者包含有各种符号的。如果有包含符号的属性名,就只能使用[属性名]的方式访问属性。一般优先考虑使用小数点访问的方式。

如果尝试去访问一个不存在的属性的话,将会返回undefined

var newObj = {
    name: 'Erichain',
    age: 21
};

console.log(newObj.girlfriend);
>> undefined  //够形象了吧

对象属性的更新

Javascript的对象的属性值是可以实时更新的。属性的个数也可以随时进行添加。

var newObj = {
    name: 'Erichain',
    age: 21
};
console.log(newObj.name);
>> Erichain

//更新属性值
newObj.name = 'Zain';
console.log(newObj.name);
>> Zain

//添加新属性
newObj.girlfriend = true;
console.log(newObj);
>> newObj = {
    name: 'Zain',
    age: 21,
    girlfriend: true
};

有了属性的添加,肯定就会有属性的删除。我们使用delete来对对象的属性进行删除:

var newObj = {
    name: 'Erichain',
    age: 21
};
console.log(newObj.name);
>> Erichain

delete newObj.name;
console.log(newObj.name);
>> undefined

对象的委托

Javascript的对象都会有一个叫做prototype的属性,所有的对象的prototype都是Object。当我们访问对象的属性值的时候,对象会首先在本对象里面寻找,如果找不到,那么就会到prototype里面去找,这个寻找的过程就称作委托。

我们可以看一个例子来理解:

var newObj = {
    name: 'Erichain',
    age: 21
};
newObj.prototype.getAge = function () {
    return this.age;
};

console.log(newObj.getAge());
>> 21

我们没有在newObj里面定义getAge()方法,但是,我们在它的原型上定义了这个方法,所以,它在本地找不到的时候,会去原型上查找这个方法。这就是委托的过程。


属性的枚举

想要枚举Javascript对象的属性,我们可以使用for in方法,也可以使用for循环,其中,for in不会按照属性的顺序来进行枚举:

var newObj = {
    name: 'Erichain',
    age: 21
};

//使用for in
for( var name in obj ) {
    console.log(obj[name] + '\n');
}

//使用for循环
//首先,定义一个数组,来存放相关的属性名
var keyName = ['name', 'age'];
for( var i = 0; i < newObj.length; i++ ) {
    console.log(keyName[i] + ':' + newObj[keyName[i]] + '\n');
}

全局命名空间

关于Javascript的全局命名空间,我们为了不污染这个空间,一般是在一个js文件里,我们定一个对象,将其他的方法等,都写在这个对象里面:

var namespace = {};

namespace.initial = function () {};

namespace.getSomeValue = function () {};

//and so on...

对象的方法

关于对象的方法,我在这里只简单的介绍一个,就是hasOwnProperty,用来判断一个对象是否含有某个属性:

var newObj = {
    name: 'Erichain',
    age: 21
};

console.log(newObj.hasOwnProperty('name'));
>> true

console.log(newObj.hasOwnProperty('girlfriend'));
>> false

关于Javascript的对象,要说的话,十篇博文都说不完,这里,是我个人总结了一些常用的东西。如果想要深入学习,大家可以找我互相交流。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值