对象基础

对象

JavaScript的简单数据类型包括数字、字符串、布尔值、null值和undefined值,其他所有的值都是对象,在JavaScript中,对象是可变的键控集合,数组是对象,函数是对象,正则表达式是对象,当然,对象自然也是对象。

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

创建对象

1,对象字面量

对象字面量提供了一种非常方便的创建新对象值的表示法。一个对象字面量就是包围在一对花括号中的零或多“名/值”对,属性名可以是包括空字符串在内的任何字符串。如果属性名是一个合法的JavaScript标识符(由字母、下划线或美元符开头,后面添加字母、数字或下划线的标识符)且不是保留字,则并不强制要求使用引号括住属性名。逗号用来分隔多个“名/值”对。(在ECMAScript5中,保留字可以用作不带引号的属性名,然而对于ECMAScript3来说,使用保留字作为属性名必须使用引号引起来,在ECMAScript5中,对象字面量的最后一个属性后的逗号将忽略,在ECMAScript3中的大部分实现中也可以忽略这个逗号,但是在IE中则报错)。

var empty = {}; //没有任何属性的对象
var p = {
  first_name:'li',       //(_)下划线是合法的
  'last-name':'mei',      //(-)连接符是不合法的,必须用字符串表示
  'father name':'lili',   //属性名中有空格,必须用字符串表示
  'for':'all' ,         //"for"为保留字,必须用引号
  age:23,
  height:180,
  like:{
    food:'水果',
    sports:'跑步'
  }
};

2,Object.create()

ECMAScript5定义了一个名为Object.create()的方法,它创建一个新对象,第一个参数就是这个对象的原型,第二个可选参数用以对对象的属性进行进一步描述。Object.create()是一个静态函数,而不是提供给某个对象调用的方法,使用很简单,只需传入所需的原型对象即可。

var a = Object.create({x:1,y:2});            //a继承了属性x和y
var b = Object.create(null); //b不能继承任何属性和方法(连基础方法都不继承,比如toString()) var c = Object.create(Object.prototype); //创建了一个普通的空对象,c和new Object()一样

3,通过new创建对象

new运算符创建并初始化一个新对象。关键字new后跟随一个函数调用,这里的函数称为构造函数,构造函数用以初始化一个新创建的对象。

var a = new Object();     //创建一个空对象,和{}一样
var b = new Array();      //创建一个空数组,和[]一样
var c = new Date();       //创建一个表示当前时间的Date对象
var d = new RegExp("js");   //创建一个可以进行模式匹配的正则对象

 属性的查询

可以通过点(.)或者方括号([ ])运算符开获取属性的值。运算符左侧应当是一个表达式,它返回一个对象。

对于点(.)来说,右侧必须是一个合法的JavaScript标识符且不是保留字。对于方括号([ ])来说,方括号内必须是一个计算结果为字符串的表达式,这个字符串就是属性的名字。在ECMAScript3中,点运算符后的标识符不能是保留字,比如o.for或者o.class,因为for是关键字,class是保留字。如果一个对象的属性名是保留字,则必须使用方括号的形式访问,如o["for"]。在ECMAScript5中对此放宽了限制,可以在点运算后面直接使用保留字,并且由于点运算更紧凑且可读性更好,优先考虑使用点运算。

var o = {
  'first-name':'li',
  last_name:'mei',
  x:1,
  y:{
    z:3
  }
};
var a = [o,4,[5,6]];
console.log(o.last_name);
console.log(o["first-name"]);   //不合法的标识符,必须使用方括号
console.log(o.x);          //对象o的x属性
console.log(o.y.z);         //对象o.y的z属性
console.log(o["x"]);         //对象o的x属性
console.log(a[1]);         //数组a中索引为1的元素
console.log(a[2]["1"]);      //数组a[2]中索引为1的元素
console.log(a[0].x);         //对象o的x属性

 

引用对象

对象通过引用来传递,它们永远不会被复制

var a = {};
var b = a;
b.lastname = '三';
a.firstname = '张'; var first = b.firstname;
var last = a.lastname; console.log(first); //a和b指向同一个对象的引用
console.log(last);

var a = {},b = {}, c = {};   //a、b和c每个都引用一个不同的空对象
var e = {},f = e, h = f;     //e、f和h都引用同一个空对象
console.log(a==b);
console.log(e===f); console.log(e===f);

原文地址:https://www.cnblogs.com/yuyujuan/p/8432634.html