1.对象:Object
JavaScript 中的所有事物都是对象:字符串、数值、数组、函数... 此外,JavaScript 允许自定义对象。
所有事物都是对象
avaScript 提供多个内建对象,比如 String、Date、Array 等等。 对象只是
带有属性和方法的特殊数据类型。
. 布尔型可以是一个对象。
. 数字型可以是一个对象。
. 字符串也可以是一个对象
. 日期是一个对象
. 数学和正则表达式也是对象
. 数组是一个对象
. 甚至函数也可以是对象
对象只是一种特殊的数据。对象拥有属性和方法。
2. 创建对象
通过 JavaScript,您能够定义并创建自己的对象。
创建新对象有不同的方法:
-
json 模式创建对象:
-
直接实例化方式,通过构造函数 new Object()创建对象;
-
创建直接的实例
这个例子创建了对象的一个新实例,并向其添加了四个属性:
替代语法(使用对象 literals):
3.操作对象
对象最常见的用法是创建(create)、设置(set)、查找(query)、 删除(delete)、检测(test)和枚举(enumerate)它的属性
1. 访问对象属性
读取对象的属性,有两种方法,一种是使用点运算符,还有一种 是使用方括号运算符。
语法:对象.属性名
注意:数值键名(特殊属性名)不能使用点运算符(因为会被当成 小数点),只能使用方括号运算符。
2. 对象添加属性
语法:对象.属性名=新增值;
Object.defineProperty () 方法会直接在一个对象上定义一个新 属性,或者修改一个对象的现有属性,并返回此对象。
备注:应当直接在 Object 构造器对象上调用此方法,而不是 在任意一个 Object 类型的实例上调用。
3. 对象属性修改
语法:对象.属性名=新增值;
4.对象属性删除
语法:delete 对象.属性名;
注意:delete 运算符只能删除自有属性,不能删除继承属性。删 除一个不存在的属性,delete 不报错,而且返回 true。 只有一 种情况,delete 命令会返回 false,那就是该属性存在,且不得 删除
5 检测对象所有属性
查看一个对象本身的所有属性,可以使用 Object.keys 方法,返回一个 数组。
6 检测对象是否有此属性
in 运算符左侧是属性名(字符串),右侧是对象。如果对象的自 有属性或继承属性中包含这个属性就返回 true。
用“ !== ”来判断一个属性是否是 undefined
hasOwnPreper ty ()方法
propertyIsEnumerable()方法
属性特性
o 可写(writable attribute):可设置该属性的值。
o 可枚举(enumerable attribute):可通过 for/in 循环返回 该属性。
o 可配置(configurable attribute):可删除或修改属性。
7 查看所有属性
查看一个对象本身的所有属性,可以使用 Object.keys 方法,返回一个 数组。
Console.log (Object.keys(o)); //[name]
4. 内存问题
1) Js 中的变量都是保存在栈内存中存储,值与值之间都是相互独立的修改
某个变量不会影响到之前复制过他的变量;
2) Js 中的对象是保存在堆内存中的,每创建一个新的对象就会在堆内存中 开辟内存空间,而变量保存的是内存地址(对象的引用),当通过一个变量修改内部属性时,复制或者引用的变量也会被影响。
5.遍历对象
JavaScript for...in 语句循环遍历对象的属性。 语法
注意: for...in 循环中的代码块将针对每个属性执行一次。
实例:
循环遍历对象的属性:
6.原型
JavaScript 是面向对象的语言,但 JavaScript 不使用类。
在 JavaScript 中,不会创建类,也不会通过类来创建对象(就像在其他面向对 象的语言中那样)。
JavaScript 基于 prototype,而不是基于类的。
每一个 JavaScript 对象(null 除外)都和另一个对象相关联,也可以说,继承另 一个对象。另一个对象就是我们熟知的“原型 ”(prototype),每一个对象都从 原型继承属性。
只有 null 除外,它没有自己的原型对象。
1、构造函数
构造函数,是用来生成“对象 ”的函数。一个构造函数可生成多个对象,这些对象都有相同的结构。
构造函数的特点:
构造函数名字的第一个字母通常大写。
比如:通过 new Object()创建的对象继承自 Object.prototype;
通过 new Array ()创建的对象的原型就是 Array.prototype
通过 new 关键字方法创建具体对象时,this 才有了具体的名字
构造函数也可以传入参数:
new 命令本身就可以执行构造函数,所以后面的构造函数可以带括号,也可以不带括号。
2、实例化对象
new 关键字会进行如下操作:
-
创建一个空的简单的javascript对象,(即{})
-
链接该对象(设置该对象的constructor)到另一个对象;
-
将步骤1新创建的对象作为this的上下午
-
如果该函数没有返回对象,则返回this
关于对象的constructor,参见object.prototype.constructor
3.原型链
对象的属性和方法,有可能是定义在自身,也有可能是定义在它的原 型对象。由于原型本身也是对象,又有自己的原型,所以形成了一条
原型链(prototype chain)。
如果一层层地上溯,所有对象的原型最终都可以上溯到Object.prototype,即 Object 构造函数的 prototype 属性指向的那个对象。那么,Object.prototype 对象有没有它的原型呢?回答可以是有的,就是没有任何属性和方法的null对象,而null对象没有自己的原型。
4、继承
JavaScript 对象具有“ 自有属性 ”,也有一些属性是从原型对象继承而来的。
当查询一个不存在的属性时,JavaScript 不会报错,返回 undefined。 如果对象自身和它的原型,都定义了一个同名属性,那么优先读取对象自身的属性,这叫做“覆盖 ”(overiding)。
5、con tructor 属性
prototype 对象有一个 constructor 属性,默认指向 prototype 对象所在的构造函数