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()0瀏覽器
使用對象初始化器也被稱做經過字面值建立對象編程語言
/* 1. 對象的初始化器建立方式 var 對象名 = { 屬性名: 屬性值, 方法名: function(){ 方法體 } } */ var boj1 = { name : 'xxx', age : 38 , sayMe : function () { console.log('我是xxx') } }
1.經過JavaScript提供的預約義類型的構造函數來建立對象函數
var num = new Number();//Number類型 var str = new String();//String類型 var boo = new Boolean();//Boolean類型
2.經過JavaScript提供的Object類型的構造函數來建立自定義對象優化
var obj = new Object();//建立一個自定義對象
Object.create()方法建立一個擁有指定原型和若干個指定屬性的對象
var 對象名 = Object.create(null) - 建立一個空對象
var 對象名 = Object.create(obj)
obj - 表示另外一個對象
特色 - 當前建立的新對象擁有與obj對象相同的屬性和方法code
var obj = 100; console.log(obj);//100 obj = { name : 'xxx', sayMe : function () { console.log('這是xxx'); } }; //{ name: 'xxx', sayMe: [Function: sayMe] } console.log(obj);
var obj1 = { name : 'xxx', sayMe : function () { console.log('這是xxx') } } console.log(obj1); var obj2 = obj1; console.log(obj2); //修改obj1對象的name屬性 obj1.name = 'yyy'; console.log(obj1); console.log(obj2); //循環遍歷對象 - for...in 語句 for(var attr in obj1){ console.log(attr); }
var obj={ name:'xxx', age:18, sayMe:function(){ console.log('我是xxx'); } }
var obj = { name : 'xxx', sayMe : function () { console.log('我是xxx'); } } /* 1.對象名 .新的屬性名 = 屬性值 2.對象名[新的屬性名] = 屬性值 */ obj.age = 18; console.log(obj); /* 空對象默認沒有自身屬性和方法(父級Object) */ var obj1 = {}; console.log(obj1); obj1.name = 'yyy'; console.log(obj1);
var obj = { name : 'xxx', sayMe : function(){ console.log('我是xxx'); } } /* 1.對象名.已存在的屬性名 = 屬性值 2.對象名[已存在的屬性名] = 屬性值 */ obj.name = 'yyy'; console.log(obj);
var obj = { name : 'xxx', sayMe : function(){ console.log('我是xxx'); } } /* 1.delete 對象名.屬性名 2.delete 對象名[屬性名] */ delete obj.name; console.log(obj.name);// undefined
可使用下面四種方法檢測對象中是否存在指定屬性:對象
var obj = { name : 'xxx', age : 18 } console.log(obj.age);// undefined // 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屬性不存在...') }
JavaScript屬性提供了三種原生方法用於遍歷或枚舉對象的屬性:
1.for..in循環:該方法依次訪問一個對象及其原型鏈中全部可枚舉的屬性
2.Object.keys(object)方法:該方法返回一個對象 o 自身包含(不包括原型中)的全部屬性的名稱的數組
3.Object.getOwnPropertyNames(object)方法:該方法返回一個數組 它包含了對象 o 全部擁有的屬性(不管是否可枚舉)的名稱ip
對象方法的調用相似於對象屬性的調用原型鏈
var obj = { name : 'xxx', age : 18, sayMe : function(){ console.log('我是xxx'); } } // 1.對象名.方法名() obj.sayMe(); // 2.對象名[方法名]() obj['sayMe']();
var obj = { name : 'xxx', age : 18, sayMe : function(){ console.log('我是xxx'); } } // 對象名.新的方法名 = function(){} obj.sayYou = function(){ console.log('你是yyy'); } console.log(obj);
var obj = { name : 'xxx', age : 18, sayMe : function(){ console.log('我是xxx'); } } // 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();// 方法調用 }