【基础】五分钟学会JavaScript对象类型

Posted on 2017-04-20 by 毛三胖

摘要

让我们一起来学习一下JavaScript的最基本,最常用,最强大的数据类型,即Object类型。内容包括对象的创建,属性的访问,属性存在与否判定,自有属性判定,枚举属性,删除属性及对象的序列化和反序列化等知识。理解Object类型是JavaScript面向对象编程的第一步。


1 Object介绍

在JavaScript中Object是最基本,最常用,最强大的数据类型,也是面向对象编程的基础。在JavaScript的六种基本的数据类型中,Object是唯一的复杂数据类型,唯一的可变数据类型。一个Object就是一个基本数据类型以名称值对存储的无序列表。

2 Object创建

Object的创建方法有很多种,本文只介绍简单的字面值创建,构造模式。

2.1 字面值

最简单的Object创建方式。

var apple = {
    name:"苹果",
    color:"红色",
    origin:["栖霞","临猗"],
    showDesc:function () {
        console.log(this.name+"是"+this.color+"的");
    }
};

2.2 构造模式

对于应用程序中只做简单的数据存储,字面值的创建方式非常的简单有效。但是对于复杂的应用时,比如我们需要构建10种水果时,每种水果都有名称,颜色,产地等,如应用上述方式就需要重复多次创建对象。我们应用构造模式并引入水果(fruit)对象来解决上述问题。

function Fruit(theName,theColor,theOrigin) {
    this.name = theName;
    this.color = theColor;
    this.origin = theOrigin;
    this.showDesc = function () {
        console.log(this.name+"是"+this.color+"的");
    }
}

应用这种方式,可以很方便的创建各种水果,如果需要改变水果的描述方法(showDesc)也只需要做一处改动就好。也可以新增自有方法和属性。

var mango = new Fruit("芒果","黄色",["陵水","南宁"]);
//输出 芒果是黄色的
mango.showDesc();

3 访问属性

Object对象中的第一项都被称为属性(函数被称为方法),一般来说属性值可以通过点号(.)或中括号([])加属性名的方式获得。属性名可以是字符串(String)也可以是数字(Number),但一般最好不要用数字做为属性名称,如果用数字做属性名称,只能采用中括号的方式访问属性。

var ageGroup = {15:"儿童",60:"老人"};
//输出 儿童
console.log(ageGroup["15"]);
//抛出 SyntaxError 
console.log(ageGroup.15);

3.1 点号(.)

var people = {name:"iFat3",sex:"男"};
//输出 iFat3
console.log(people.name);

3.2 中括号([])

var people = {name:"iFat3",sex:"男"};
//输出 iFat3
console.log(people["name"]);

4 属性存在与否判定

var people = {name:"iFat3",sex:"男"};
//输出 true
console.log("name" in people);
//输出 false
console.log("age" in people);
//输出 true,继承而来
console.log("toString" in people);

5 自有属性判定

var people = {name:"iFat3",sex:"男"};
//输出 true
console.log(people.hasOwnProperty("name"));
//输出 false,继承属性非自有属性
console.log(people.hasOwnProperty("toString"));

6 访问并枚举属性

var people = {name:"iFat3",sex:"男"};
//输出 name sex
for(var item in people) {
    console.log(item);
}

7 删除属性

只能删除自有属性,不能删除继承属性。

var people = {name:"iFat3",sex:"男"};
delete people.sex;
//输出 undefined
console.log(people.sex);
delete people.toString();
输出 [object Object]
console.log(people.toString());

8 序列化和反序列化

使用JSON.stringify函数来序列化对象,使用JSON.parse函数来反序列化对象。

var people = {name:"iFat3",sex:"男"};
var peopleStr = JSON.stringify(people);
//输出 string
console.log(typeof peopleStr);
//输出 {"name":"iFat3","sex":"男"}
console.log(peopleStr);
var people2 = JSON.parse(peopleStr);
//输出 object
console.log(typeof people2);
//输出 iFat3
console.log(people2.name);

本文并未介绍JavaScript的原型属性,Prototype部分内容较多会另做介绍。

JavaScript数据类型介绍