JavaScript语言精粹学习笔记-对象

JavaScript的数据类型分为两类:
原始类型(primitive type)和对象(Object type)。
原始类型包括:数字、字符串和布尔值。
JavaScript中还有两个特殊的原始值null(空)和undefined(未定义),他们不是数字、字符串和布尔值。他们分别代码各自特殊类型的唯一成员。但是要注意

(typeof null)=="object"//true

除了数值、字符串、布尔值和null、undefined之外,其他的都是对象,比如函数、数组、正则表达式等。

对象是属性的容器,其中每个对象都有名字和值。属性的名可以是包括空字符串在内的所有字符串,属性值可以是除了undefined之外的所有值。

对于函数来讲,typeof 返回值有可能是’function’,但是函数也是是对象,他可以存储在变量、数组、对象中,函数可被当成参数,函数也可以返回函数,
并且因为函数是对象,所以函数可以拥有方法。

JavaScript包括一个原型链特性,可以通过指定它来继承一个对象的属性。

3.1对象字面量: 一个对象字面量就是包裹在花括号中的零个或多个”名/值”对,对象字面量可以出现在任何表达式可以出现的位置。
如果属性名是一个合法的标识符,则属性名可以不用引号,但是类似于first-name,就得这样定义”first-name”

var empty_object = {};

var Star= {
    "first-name": "Tom",
    "last-name": "Green"

};

对象是可以任意嵌套的。

var flight = {
    airline: "Oceanic",
    number: 815,
    departure: {
        IATA: "SYD",
        time: "2004-09-22 14:55",
        city: "Sydney"
    },
    arrival: {
        IATA: "LAX",
        time: "2004-09-23 10:42",
        city: "Los Angeles"
    }
};

3.2检索:检索对象的属性,可以使用[]包裹一个字符串表达式的值。如果这个字符串表达式是一个常数,并且这个字符串是JavaScript的合法标识符且不是保留字,那么可以使用 . 表示法来替代。

Star["first-name"] //"Tom"
flight.departure.IATA//"SYD"

若果你试图检索一个不存在的属性,则它会返回undefined;可以使用||来给他定义默认值。

Star["middle-name"]//undefined
var middle_name = stooge["middle-name"]||"io"//"io"

强制检索一个undefined的属性会导致TypeError异常。可以通过&&来避免

flight.equipment            //undefined
filgth.equipment.model      //throw "TypeError"
flight.equipment&&filgth.equipment.model

3.3更新和删除属性:
对象中的属性可以通过赋值语句来更新,如果该属性已存在,则会更新属性值,如果不存在,那么就会添加一个新的属性。

Star["airline"] = "good";//给stooge对象添加airline属性,并赋值
Star["airline"] = "bad";//更改airline的值。

delete 可以删除对象中的属性,但是不会涉及到原型链中的属性。

3.4引用:与原始类型不同,对象都是通过引用来传递的,他们永远都不会有拷贝。
原始类型,比如说数字:

var x = 12;
var b = x;   //b=12,x=12
b = b + 2;   //b=14,x=12

对于对象:

var obj={name:"shaozuo"};
var obj2 = obj;
obj2.name = "taijun";//obj.name="taijun"

3.5原型: 每个对象都有一个原型对象,并且可以从中继承属性。所有通过对象字面量创建的对象,都连接到Object.prototype这个javascript标准对象。
你可以在创建对象的时候给对象选择原型,这在使用构造函数的时候才有效;
原型连接在更新的时候不起作用,只有在检索对象属性的时候才会起作用。当你要检索的属性在对象中不存在时,他会检索对象原型,直到Object.prototype,如果还是不存在,会返回undefined。
原型是一种动态关系,如果在原型中添加一个属性,他会立即对基于该原型的对象可见。

3.6反射:检查对象的属性是很容易的事情, 使用typeof检查对象任何的属性,都会有返值,返回值是这六个字符串中的一个。
'number'、'string'、'boolean'、'undefined'、'function'、'object
可以使用hasOwnProperty方法来检查属性,但是该方法不会检查原型链中的数据。

3.7枚举:使用for in可以枚举对象的所有属性,包括你不需要的属性,所以可以使用hasOwnProperty方法或typeof来过滤对象的属性。但是使用for in 是没有顺序的,
如果想让其顺序显示,最好使用数组将属性名存储起来,然后在对象中遍历。

3.8减少全局变量的污染:最小化使用全局变量的方法就是在你的应用中只创建一个全局变量。类似于JQuery中,只有两个全局变量JQuery和$,其他的所有函数等的定义都在匿名函数之中。

猜你喜欢

转载自blog.csdn.net/laozhaishaozuo/article/details/45674803