JavaScript对象

对象

javaScript中的对象,和别的编程言语中的对象一样,能够对照现实生活中的对象来明白。在JavaScript中,一个对象能够是一个零丁具有属性和范例的实体。和杯子做一下比较,一个杯子是一个对象,具有属性,杯子有色彩、图案、分量等。一样,JavaScript也有属性来定义它的特性。
要领是关联到某个对象的函数,或许简朴地说,一个要领是一个值为某个函数的对象属性,定义要领就像定义平常的函数,除了它们必需被赋给对象的某个属性。

对象的分类

  1. 内置对象/原生对象:就是JavaScript言语预定义的对象,在ECMAScript规范定义,有JavaScript诠释器/引擎供应详细完成
  2. 宿主对象:指的是javaScript运转环境供应的对象。平常是由浏览器厂商供应完成(现在也有自力的JavaScript诠释器/引擎供应完成),重要分为BOM和DOM
  3. 自定义对象:就是由开发人员自立建立的对象

Object对象

Object范例与Array、Math等一样都是JavaScript的援用范例。不过Object范例是JavaScript中一切范例的父级(一切范例的对象都能够运用Object的属性和要领),JavaScript能够经由过程Object的组织函数来建立自定义对象。当以非组织函数情势被挪用时,Object等同于new Object()
Object对象的要领分为自有要领和原型要领两种:
自有要领
create():指定原型对象和属性来建立一个新的对象
getOwnOropertyNames():返回一个数组,它包含了指定对象一切的可罗列或不可罗列的属性名
keys():返回一个数组,包含指定对象的一切自有可遍历属性的称号
原型要领
prototype.hasOwnProperty():返回一个布尔值,该值指导对象是不是包含指定的属性

建立对象

1.对象的初始化器建立体式格局
var 对象名={

属性名:属性值,
要领名:function(){
    要领体
}

}

var obj={
    name : '张三',
    age : 20,
    sayMe : function(){
        console.log('我是张三');
    }
}

2.对象的组织函数体式格局
应用一切援用范例建立对应的对象
应用Object作为组织函数建立对象
var 对象名 = new Object();
var 对象名 = Object();

var obj = new Object();
var obj1 = Object();

3.应用Object.create()要领建立对象

//建立一个空对象:var 对象名 = Object.create(null)
var obj=Object.create(null);
/*当前建立的新对象具有与obj对象雷同的属性和要领:
  var 对象名 = Object.create(obj);
  obj示意另一个对象*/
var obj1=Object.create(obj2);

4.建立空对象

var obj={}

建立体式格局对照

Number、String和Boolean
字面量体式格局建立的是原始范例,组织函数体式格局建立是援用范例
Array和Object
无论是字面量体式格局照样组织函数体式格局建立的都是援用范例

变量、函数与对象

实在定义的变量就是某个对象的属性,定义的函数就是某个对象的要领
JavaScript中具有一个全局对象(Global),仅存在于观点
1.浏览器运转环境,BOM中Window(窗口)对象
2.Node.js运转环境

var obj={
    name:'张三',
    age:20,
    sayMe:function(){
        console.log('我是张三');
    }
}

挪用对象的属性

//1.对象名.属性名:不适用于庞杂定名的属性称号
console.log(obj.name);
//2.对象名[属性名]:通用的挪用体式格局,与数组相似,适用于庞杂定名的属性称号
console.log(obj['name']);
//接见一个对象不存在的属性,返回undefined
console.log(obj.age);//返回undefined

新增对象的属性

//1.对象名.新的属性名=属性值
obj.age=18;
//2.对象名[新的属性名]=属性值
obj['name']='张三';

修正对象的属性

//1.对象名.已存在的属性名=属性值
obj.age=20;
2.对象名[已存在的属性名]=属性值
obj['name']='李四';

删除对象的属性

1.delete 对象名.属性名
delete obj.age;
2.delete 对象名[属性名]
delete obj['name'];

检测对象的属性

1.推断对象的属性是不是为undefined

if(obj.age!==undefined){
    console.log('obj对象的age属性存在...');
}else{
    console.log('请定义obj对象的age属性...');
}

2.推断对象的属性值,先转换为Boolean范例

if(obj.age){
    console.log('obj对象的age属性存在...');
}

3.应用in关键字举行推断

if('age' in obj){
    console.log('obj对象的age属性存在...');
}else{
    console.log('obj对象的age属性不存在...');
}

4.Object范例供应了hasOwnProperty()要领

if(obj.hasOwnProperty('age')){
    console.log('Obj对象的age属性存在...');
}else{
    console.log('obj对象的age属性不存在...');
}

遍历对象的属性

1.for…in语句

//建立一个对象
var obj={
    name:'张三',
    age:20,
    sayMe:function(){
        console.log('我是张三');
    }
}
//for...in语句
for(var objAttr in obj){
    //经由过程对象属性或要领对应的值的范例举行区分
    if(obj[objAttr] instanceof Function){
        //当前是对象的要领
        obj[objAttr]();
    }else{
        //当前是对象的属性
        console.log(obj[objAttr]);
    }
}

2.Object范例供应了keys()要领,只能遍历可罗列的属性

//建立一个对象
var obj={
    name:'张三',
    age:20,
    sayMe:function(){
        console.log('我是张三');
    }
}
//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 obj={
    name:'张三',
    age:20,
    sayMe:function(){
        console.log('我是张三');
    }
} 
//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]);
    }
}

挪用对象的要领

//建立一个对象
var obj={
    name:'张三',
    age:20,
    sayMe:function(){
        console.log('我是张三');
    }
}
//1.对象名.要领名()
obj.sayMe();
//2.对象名[要领名]()
obj['sayMe']();

新增对象的要领

//建立一个新的对象
var obj={
    name:'李四',
    age:20,
    sayMe:function(){
        console.log('我是李四');
    }
}
//1.对象名.新的要领名=function(){}
obj.sayYou=function(){
    console.log('你是张三');
}
//2.对象名[新的要领名]=function(){}
obj[sayHe]=function(){
    console.log('他是大王');
}

修正对象的要领

//建立一个对象
var obj={
    name:'张三',
    age:20,
    sayMe:function(){
        console.log('我是张三');
    }
}
//1.对象名.要领名=function(){}
obj.sayMe=function(){
    console.log("你是李四");
}
//2.对象名[要领名]=function(){}
obj[sayMe]=function(){
    console.log('你是李四');
}

删除对象的要领

//建立一个对象
var obj={
    name:'张三',
    age:20,
    sayMe:function(){
        console.log('我是张三');
    }
}
//1.delete 对象名.要领名
delete obj.sayMe;
//接见对象中不存在的要领,报错(TypeError: obj.sayMe is not a function)

//2.delete 对象名[要领名];
delete obj[sayMe];
    原文作者:庄国琳
    原文地址: https://segmentfault.com/a/1190000015994766
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞