对象
javaScript中的对象,和别的编程言语中的对象一样,能够对照现实生活中的对象来明白。在JavaScript中,一个对象能够是一个零丁具有属性和范例的实体。和杯子做一下比较,一个杯子是一个对象,具有属性,杯子有色彩、图案、分量等。一样,JavaScript也有属性来定义它的特性。
要领是关联到某个对象的函数,或许简朴地说,一个要领是一个值为某个函数的对象属性,定义要领就像定义平常的函数,除了它们必需被赋给对象的某个属性。
对象的分类
- 内置对象/原生对象:就是JavaScript言语预定义的对象,在ECMAScript规范定义,有JavaScript诠释器/引擎供应详细完成
- 宿主对象:指的是javaScript运转环境供应的对象。平常是由浏览器厂商供应完成(现在也有自力的JavaScript诠释器/引擎供应完成),重要分为BOM和DOM
- 自定义对象:就是由开发人员自立建立的对象
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];