JS的数据类型---对象

JavaScript的数据类型----------对象

对象是 JavaScript 的数据类型。它将很多值(原始值或者其他对象)聚合在一起,可通过名字访问这些值,因此我们可以把它看成是从字符串到值的映射。对象是动态的,可以随时新增和删除自有属性。对象除了可以保持自有的属性,还可以从一个称为原型的对象继承属性,这种「原型式继承(prototypal inheritance)」是 JavaScript 的核心特征。 创建对象的方法,一般是三种,对象字面量、new 关键字创建和 ECMAScript 5 中的 Object.create() 函数来创建对象。 创建对象最简单的方式------使用对象字面量创建对象(我们经常这么用的方法)

对象字面量是由若干名值对组成的映射表,名值对中间用冒号分隔,名值对之间用逗号分隔,整个映射表用花括号括起来。属性名可以是 JavaScript 标识符也可以是字符串直接量(包括空字符串)。属性的值可以是任意类型的 JavaScript 表达式,表达式的值(可以是原始值也可以是对象值)就是这个属性的值。 输入图片说明输入图片说明 这两种写法都是一样的,但是比较推荐第一种写法

使用 new 关键字创建对象 new 关键字创建并初始化一个新对象。关键字 new 后跟随一个函数调用。这里的函数称做构造函数(constructor),构造函数用以初始化一个新创建的对象。JavaScript 语言核心中的原始类型都包含内置构造函数。例如: 输入图片说明 这里面的var person = new Object(); 等价于 var person = {};

使用 Object.create() 函数创建对象----用得比较少,基本上不会这么用的

ECMAScript 5 定义了一个名为 Object.create() 的方法,它创建一个新对象,其中第一个参数是这个对象的原型。Object.create() 提供第二个可选参数,用以对对象的属性进行进一步描述。Object.create() 是一个静态函数,而不是提供给某个对象调用的方法。使用它的方法很简单,只须传入所需的原型对象即可。例如: 输入图片说明 这里的 var person = Object.create(Object.prototype);也等价于 var person = {};

对象的原型(prototype) 所有通过对象字面量创建的对象都具有同一个原型对象,并可以通过 JavaScript 代码 Object.prototype 获得对原型对象的引用。通过关键字 new 和构造函数调用创建的对象的原型就是构造函数的 prototype 属性的值。因此,同使用 {} 创建对象一样,通过 new Object() 创建的对象也继承自 Object.prototype。同样,通过 new Array() 创建的对象的原型就是 Array.prototype,通过 new Date() 创建的对象的原型就是 Date.prototype

没有原型的对象为数不多,Object.prototype 就是其中之一。它不继承任何属性。其他原型对象都是普通对象,普通对象都具有原型。所有的内置构造函数(以及大部分自定义的构造函数)都具有一个继承自 Object.prototype 的原型。例如,Date.prototype 的属性继承自 Object.prototype,因此由 new Date() 创建的 Date 对象的属性同时继承自 Date.prototypeObject.prototype。 这一系列链接的原型对象就是所谓的「原型链(prototype chain)」。

对象属性的查询和设置

可以通过点 . 或方括号 [] 运算符来获取属性的值。对于点 . 来说,左侧应当是一个对象,右侧必须是一个以属性名称命名的简单标识符。对于方括号来说 [] ,方括号内必须是一个计算结果为字符串的表达式,这个字符串就是属性的名称。例如: 输入图片说明 和获取属性的值写法一样,通过点和方括号也可以创建属性或给属性赋值,但需要将它们放在赋值表达式的左侧。例如: 输入图片说明 当使用方括号时,方括号内的表达式必须返回字符串。更严格地讲,表达式必须返回字符串或返回一个可以转换为字符串的值。

对象属性值的访问 错误查询一个不存在的属性并不会报错,如果在对象 A 自身的属性或继承的属性中均未找到属性 x,属性访问表达式 A.x 返回 undefined

删除属性

delete 运算符用来删除对象属性,事实上 delete 只是断开属性和宿主对象的联系,并没有真正的删除它。delete 运算符只能删除自有属性,不能删除继承属性(要删除继承属性必须从定义这个属性的原型对象上删除它,而且这会影响到所有继承自这个原型的对象)。 个人基本上很少会用到,这里就不加以说明啦~

检测属性

JavaScript 对象可以看做属性的集合,我们经常会检测集合中成员的所属关系(判断某个属性是否存在于某个对象中)。可以通过 in 运算符来完成这个工作 in 运算符的左侧是属性名(字符串),右侧是对象。如果对象的自有属性或继承属性中包含这个属性则返回 true。例如: 输入图片说明 除了使用 in 运算符之外,另一种更简便的方法是使用 !== 判断一个属性是否是 undefined。例如: 输入图片说明 遍历对象 除了检测对象的属性是否存在,我们还会经常遍历对象的属性。通常使用 for-in 循环遍历,ECMAScript 5 提供了两个更好用的替代方案。 输入图片说明 在这里找到对象千万不要用person.i来试图拿到对应的值,会返回undefined给你的

序列化对象(JSON)

对象序列化(serialization)是指将对象的状态转换为字符串,也可将字符串还原为对象。ECMAScript 5 提供了内置函数 JSON.stringify()JSON.parse() 用来序列化和还原 JavaScript 对象。这些方法都使用 JSON 作为数据交换格式,JSON 的全称是「JavaScript 对象表示法(JavaScript Object Notation)」,它的语法和 JavaScript 对象与数组直接量的语法非常相近。例如: 输入图片说明 所谓的深拷贝,就是说,A和C所处的堆是两个不同的位置,改变A或者改变C不会改变对方的值 如果是浅拷贝,就是说,A和C所处的堆是一个相同的位置,改变A或者改变C会改变对方的值

由睿江云人员提供,想了解更多,请登陆www.eflycloud.com

转载于:https://my.oschina.net/u/3363053/blog/1537319

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值