对象
对象的概述
对象是什么
JavaScript中的对象,和其他编程言语中的对象一样。能够对照现实生活中的一些东西来明白他。
在JavaScript中,一个对象能够使一个纯真的具有属性和范例的实体。如果和一个杯子相比较,一个杯子是一个对象,具有属性。杯子有色彩、图案、分量等。一样,JavaScript对象也有属性来定义它的特性。
要领是关联到某个对象的函数,或许简朴来讲,一个要领是一个值为某和函数的对象属性。定义要领就像定义平常的函数,出了他们必需被赋给对象的某个属性。
对象的分类
1.内置对象/原生对象
就是JavaScript言语预定义的对象。在ECMAScript规范定义,有JavaScript诠释器/引擎供应详细完成。
2.宿主对象
指的是JavaScript运转环境供应的对象。平常由浏览器厂商供应完成(现在也有自力的JavaScript诠释器/引擎供应完成),重要分文BOM和DOM。
3.自定义对象
就是由开发人员自立建立的对象。
对象的初始化器罕见体式格局,代码以下;
Object对象
Object对象是什么
Object范例与Array、Math等一样都是JavaScript的援用范例。不过Object范例是JavaScript中一切范例的父级(一切范例的对象都能够运用Object的属性和要领)。
JavaScript能够经由过程Object的组织函数来建立自定义对象。当以非组织函数情势被挪用时,Object等同于new Object()。
建立对象
对象初始化器体式格局
运用对象初始化器也被称作经由过程字面值建立对象。
1.对象的初始化器建立体式格局
var 对象名 = {
属性名 : 属性值,
要领名 : function(){
要领体
}
}
var obj1 = {
name : '张无忌',
age : 18,
sayMe : function(){
console.log('我是张无忌');
}
}
组织函数体式格局
组织函数时经由过程JavaScript供应的预定义范例的组织函数来建立对象的。
代码以下;
对象的组织函数体式格局
应用一切援用范例建立对应的对象 -> 具有详细的范例
var num = new Number();// Number范例
var str = new String();// String范例
var boo = new Boolean();// Boolean范例
应用Object作为组织函数建立对象
var 对象名 = new Object();
var 对象名 = Object();
var num = new Number();//Number范例
var num2 = Number();
var str = new String();//String范例
var boo = new Boolean();//Boolean范例
var obj2 = new Object();
var obj3 = Object();
console.log(obj2);//{}空对象
console.log(obj3);//{}空对象
var obj4 = new Object(undefined);
var obj5 = new Object(null);
console.log(obj4);//{}空对象
console.log(obj5);//{}空对象
Object.create()要领
Object.create()要领建立一个具有指定原型和若干个指定属性的对象。
参数;
1.proto参数;一个对象,作为新建立对象的原型
2.propertiesObject参数;可选。该参数对象是一组属性与值,该对象的属性称号尝尝建立的对象的属性称号,值是属性描述符。
代码以下;
应用Object.create()要领建立对象
var 对象名 = Object.create(null) -> 建立一个空对象
var 对象名 = Object.create(obj)
obj - 示意另一个对象
特性 - 当前建立的新对象具有与obj对象雷同的属性和要领
var obj6 = Object.create(null);
var obj7 = Object.create(obj1);
对象的属性
定义对象的属性
一个JavaScript对象有很对属性。一个对象的属性能够诠释成一个附加到对象的变量。对象的属性和平常的JavaScript变量基础没有什么区分,仅仅是属性属于某个对象。
var obj = {
name : '张无忌',
'Type-Content' : 'text/html',
sayMe : function(){
console.log('我是张无忌');
}
}
/*
1.对象名.属性名
* 不适用于庞杂定名的属性称号
*/
console.log(obj.name);// 张无忌
// console.log(obj.Type-Content);
2.对象名[属性名] - 通用的挪用体式格局
适用于庞杂定名的属性称号
console.log(obj['name']);// 张无忌
console.log(obj['Type-Content']);// text/html
接见一个对象不存在的属性 -> 值为 undefined
console.log(obj.age);
接见对象的属性
1.JavaScript能够经由过程点标记来接见一个对象的属性。
var emp = {
ename:'Tom',salary:3500
};
emp.ename = 'Tommy'//修正属性的值
console.log(emp.ename);//猎取属性的值
2.JavaScript对象的属性也能够经由过程方括号接见。
var emp = {
ename:'Tom',salary:3500
};
emp['ename'] = 'Tony';//修正属性的值
console.log(emp["ename"]);//猎取属性的值
遍历属性
JavaScript供应了三种原生要领用于遍历或罗列对象的属性;
1.for…in轮回:该要领顺次接见一个对象及其原型链中一切课罗列的属性。
2.Objectkeys(object)要领:该要领返回一个对象o本身包含(不包含原型中)的一切属性的称号的数组。
3.ObjectgetOwnpropertyNames(object)要领:该要领返回一个数组,他包含了对象o一切具有的属性(不管是不是可罗列)的称号。
var obj = {
name : '张三',
age : 18,
sayMe : function(){
console.log('我是张三');
}
}
// 1.for...in语句
for (var objAttr in obj) {
// 经由过程对象属性或要领对应的值的范例举行区分
if (obj[objAttr] instanceof Function) {
// 当前是对象的要领
obj[objAttr]();
} else {
// 当前是对象的属性
console.log(obj[objAttr]);
}
}
// 2.Object范例供应了keys()要领 - 只能遍历可罗列的属性
var arr = Object.keys(obj);
for (var v in arr) {
var objAttr = arr[v];
// 经由过程对象属性或要领对应的值的范例举行区分
if (obj[objAttr] instanceof Function) {
// 当前是对象的要领
obj[objAttr]();
} else {
// 当前是对象的属性
console.log(obj[objAttr]);
}
}
// 3.Object范例供应了getOwnPropertyNames()要领 - 包含不可罗列的属性
var arr = Object.getOwnPropertyNames(obj);
for (var v in arr) {
var objAttr = arr[v];
// 经由过程对象属性或要领对应的值的范例举行区分
if (obj[objAttr] instanceof Function) {
// 当前是对象的要领
obj[objAttr]();
} else {
// 当前是对象的属性
console.log(obj[objAttr]);
}
}
属性接见失足
当不确定对象是不是存在、对象的属性是不是存在时,能够运用毛病处理构造try…catch语句块来捕获抛出的毛病,防止顺序非常停止。
//接见未声明的变量
console.log(emp);
//接见未声明的属性
var emp = {};
console.log(emp.ename);
//接见未声明的属性的成员
console.log(emp.ename.length);
搜检对象的属性
搜检对象的属性能够运用以下四种要领检测对象中是不是存在指定属性
1.运用关键字in
var obj = {
name : '张无忌',
age : 18
}
if ('age' in obj) {
console.log('obj对象的age属性存在...');
} else {
console.log('obj对象的age属性不存在...')
2.运用Object对象的hasOwnProperty()要领。
var obj = {
name : '张无忌',
age : 18
}
if (obj.hasOwnProperty('age')) {
console.log('obj对象的age属性存在...');
} else {
console.log('obj对象的age属性不存在...')
}
3.运用undefined举行推断。
var obj = {
name : '张无忌',
age : 18
}
if (obj.age !== undefined) {
console.log('obj对象的age属性存在...');
} else {
console.log('请先定义obj对象的age属性...');
}
4.运用if语句举行推断
var obj = {
name : '张无忌',
age : 18
}
if (obj.age) {
console.log('obj对象的age属性存在...');
}
删除对象的属性
能够用delete操作符删除一个不是继续而来的属性。
var obj = {
name : '张无忌',
sayMe : function(){
console.log('我是张无忌');
}
}
1.delete 对象名.属性名
2.delete 对象名[属性名]
delete obj.name;
console.log(obj.name);// undefined
对象的要领
定义对象的要领
定义要领就像定义平常的函数,出了他们必需被给予给对象的某个属性。
var obj = {
name : '张无忌',
age : 18,
sayMe : function(){
console.log('我是张无忌');
}
}
// 1.对象名.新的要领名 = function(){}
obj.sayYou = function(){
console.log('你是周芷若');
}
console.log(obj);
// 2.对象名[新的要领名] = function(){}
挪用对象的要领
对象要领的挪用类似于对象属性的挪用,很简朴 有两种属性
var obj = {
name : '张无忌',
age : 18,
sayMe : function(){
console.log('我是张无忌');
}
}
// 1.对象名.要领名()
obj.sayMe();
// 2.对象名[要领名]()
obj['sayMe']();
删除对象的要领
能够用delete操作符删除对象
代码示例;
var obj = {
name : '张无忌',
age : 18,
sayMe : function(){
console.log('我是张无忌');
}
}
// 1.delete 对象名.要领名
delete obj.sayMe;
// 接见对象中不存在的要领 -> 报错(TypeError: obj.sayMe is not a function)
// obj.sayMe();
console.log(obj.sayMe);// undefined
console.log(obj);
// 以属性是不是存在的体式格局举行推断
if ('sayMe' in obj) {
// 确认现在是一个要领
if (obj.sayMe instanceof Function) {
obj.sayMe();// 要领挪用
}
}
// 以上代码能够优化为以下代码
if ('sayMe' in obj && obj.sayMe instanceof Function) {
obj.sayMe();// 要领挪用
}
// 2.delete 对象名[要领名]