一切皆對象(原始值+對象)
基本類型:字符串、數字、佈爾、數組、對象、null、undefined
創建對象的三種方式
1、通過new關鍵字
var obj=new Object();
2、通過對象字面量
1)簡單字面量
var obj={};
2)嵌套字面量
var obj={ name:'ll', age:23, todo:function(){}
}
3、構造函數
(區別一下函數聲明和函數表達式)
console.log(add(2,5)); function add(a,b){ return a+b; };//函數聲明:在聲明前即可使用 var add1 = function(a,b) { return a+b; }; add1(3,4);//函數表達式
構造函數
function Person(name,age) { this.name = name; this.age = age; this.todo = function() { return this.name; } } var aa = new Person('sonia',20); var bb = new Person('cole',23);
構造函數和普通函數的區別
1)this指向 構造函數的this指向創建的對象實例上 普通函數函數的調用者 2)調用方式 構造函數 new 3)命名方式 構造函數首字母大寫
關於屬性的操作
1、獲取或設置屬性 ./[]
var obj = {}; obj.name = 'll'; obj['age'] = 22;
區別:.是取自身的屬性,[]可以是變量
例子:
var o = {}; o.name = 'xxx'; var nameA ='name'; console.log(o['nameA']);//xxx console.log(o[nameA]);//undefined
2、屬性的刪除
delete o.name;
3、檢測屬性三種方式
1)in運算符
var o = {}; o.name = 'xxx'; o.age = 'undefined' console.log('name' in o);
2)hasOwnProperty()
var o = {}; o.name = 'xxx'; o.age = 'undefined'; console.log(o.hasOwnProperty('name'));
3)!=undefined(不推薦)
var o = {}; o.name = 'xxx'; o.age = 'undefined' console.log(o.age != 'undefined' );
4、枚舉
遍歷對象,可以取到key,也可以取到value
var o = {x:1,y:2,z:3}; var a; for (a in o) {console.log(a)}; // x y z for (a in o) {console.log(o[a])}; // 1 2 3
遍歷數組:可以取到索引 var arr =[{x:1},{y:2},{z:3}]; for (a in arr ){console.log(a)} // 0 1 2
遍歷數組的方法
//同步:阻塞 for(var i = 0;i<10; i++){ } //異步:非阻塞 var data = msg; $.each(data,function(index,item) { })
5、序列化對象
var o2 = {x:1,y:2,z:3}; console.log(JSON.stringify(o2)); JSON.parse();//深拷貝(完全獨立的)
淺拷貝(對象和數組都是淺拷貝)像影子
例:
var o3 = {x:1,y:2,z:3}; var p = o3; o3.x = 111; console.log(p); //{x:111,y:2,z:3}