javascript 数字类型-JavaScript 数据类型 – 对象

对象是 JavaScript 数据类型。 它将许多值(原始值或其他对象)聚合在一起,并且可以通过名称访问这些值,因此我们可以将其视为从字符串到值的映射。 对象是动态的,可以随时添加和删除自己的属性。 对象不仅可以维护自己的属性,还可以从称为原型的对象继承属性。 这些“原型继承”是 JavaScript 的核心特性。

创建对象通常有三种方式,对象字面量、new关键字创建以及ECMAScript5中的Object.create()函数创建对象。

创建对象最简单的方法---使用对象字面量创建对象(我们经常使用这种技术)

对象字面量是由多个名称-值对组成的映射表。 名称-值对用逗号分隔,名称-值对用冒号分隔。 整个映射表用大括号括起来。 属性名称可以是 JavaScript 标识符或字符串文字(包括空字符串)。 属性的值可以是任何类型的 JavaScript 表达式,表达式的值(可以是原始值或对象值)就是该属性的值。

这两种写法是一样的,推荐第一种写法

对象是使用new关键字创建的

new 关键字创建并初始化一个新对象。 关键字 new 后面跟着一个函数调用。 这里的函数称为构造函数(constructor),构造函数用于初始化一个新创建的对象。 JavaScript 语言核心的原始类型都包含外部构造函数。 例如:

这里 varperson=newObject(); 相当于 varperson={};

使用Object.create()函数创建对象----较少使用,基本上没那么有用

ECMAScript5 定义了一个名为 Object.create() 的方法,该方法创建一个新对象,其中第一个参数是该对象的原型。 Object.create() 提供了第二个可选参数来进一步描述对象的属性。 Object.create() 是一个静态函数,不是为对象调用它的方法。 使用方法很简单,传入需要的原型对象即可。 例如:

这里 varperson=Object.create(Object.prototype); 也相当于 varperson={};

对象的原型(prototype)

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

Object.prototype 是少数没有原型的对象之一。 它不继承任何属性。 其他原型对象都是普通对象javascript 数字类型,普通对象也有原型。 所有外部构造函数(以及大多数自定义构造函数)都有一个从 Object.prototype 继承的原型。 例如,Date.prototype的属性继承自Object.prototype,因此newDate()创建的Date对象的属性同时继承自Date.prototype和Object.prototype。

这一系列链接起来的原型对象就是所谓的“原型链”。

##查询和设置对象属性

可以通过点来获取属性的值。 或方括号 [] 运算符。 对于dot.来说,两边都应该是一个对象,而且两边都必须是一个以属性名命名的简单标识符。 对于方括号 [],方括号必须是计算结果为字符串的表达式javascript 数字类型,并且该字符串是属性的名称。 例如:

与获取属性值的方式相同,也可以创建属性或通过点和方括号给属性赋予形参,但需要将它们放在形参表达式的右侧。 例如:

使用方括号时,方括号内的表达式必须返回字符串。 更严格地说,表达式必须返回一个字符串或返回一个可以转换为字符串的值。

访问对象属性值

错误查询不存在的属性不会报错。 如果在对象A本身的属性或继承的属性中没有找到属性x,则属性访问表达式Ax返回undefined。

##删除属性

删除运算符用于删除对象属性。 事实上,delete只是断开属性和宿主对象之间的联系,并没有真正删除它。 删除操作符只能删除自有属性,不能删除继承属性(要删除继承属性,必须从定义该属性的原型对象中删除,但这会影响继承该原型的所有对象)。

个人很少用,这里就不解释了~

##测量属性

JavaScript 对象可以看作是属性的集合,我们经常检查集合中成员的成员身份(以确定某个属性是否存在于对象中)。这可以通过 in 运算符来完成

in 运算符的右侧是属性名称(字符串),右侧是对象。 如果对象在其自己的或继承的属性中包含此属性,则返回 true。 例如:

除了使用 in 运算符之外,另一种更简单的方法是使用 !== 来判断属性是否未定义。 例如:

遍历对象

javascript 数字类型

不仅要衡量对象的属性是否存在,我们还会经常遍历对象的属性。 一般使用for-in循环遍历,ECMAScript5提供了两个比较有用的替代方案。

如果你在这里找到了对象,不要使用 person.i 来尝试获取相应的值,它会返回 undefined 给你

##序列化对象(JSON)

对象序列化是指将对象的状态转换为字符串,或者将字符串恢复为对象。 ECMAScript5 提供外部函数 JSON.stringify() 和 JSON.parse() 来序列化和恢复 JavaScript 对象。 该方法使用JSON作为数据交换格式。 JSON 的全称是“JavaScript Object Notation(JavaScript 对象表示法)”,其语法与 JavaScript 对象和链表文字非常相似。 例如:

所谓深拷贝,就是A和C所在的堆是两个不同的位置,改变A或者改变C都不会改变另一个的值

如果是浅拷贝,也就是说A和C所在的堆在同一个位置,改变A或者改变C都会改变另一个的值

上一主题--------JavaScript函数