javaScript 基础知识汇总(四)
1、对象
概念:对象可以通过花括号{...} 和其中包含一些可选的属性来创建。 属性时一个键值对,键是一个字符串,值可以是任何类型。
对象的创建
1 let user = new Object(); //构造函数 的语法 2 let user = {}; //"字面量" 的语法
对象的属性:
1 let user = { //一个对象 2 name : "John", //键“name" ,值"John" 3 age:30 //"键”age“ ,值 30 4 }; 5 6 属性有键 ,在冒号的前面”:“,值在冒号的右边
对象属性的添加和删除
1 user.sex = "man"; //对象属性的添加 2 delete user.sex; //对象的的删除
对象中方括号的使用
1 //处理多词属性 2 let user = {}; 3 4 user["like birds"] = true;//设置 5 6 alert(user["like birds"]); //true 使用 7 8 delete user["like birds"]; // 删除
计算属性
1 //例子一: 2 let fruit ="apple"; 3 let bag = { 4 [fruit]:5 5 }; 6 alert(bag.apple); 7 8 //例子二: 9 let fruit = "apple"; 10 let bag = {}; 11 bag[fruit] = 5; 12 //例子三 13 let fruit = "apple"; 14 let bag = { 15 [fruit + "test"]:5; 16 }; 17 alert(bag.fruittest);
属性值简写
当属性值的和键相同时可以如下所写
let user = {
name, //此处 name 和 name:name 相同
age:13
}
对像属性存在值的检查
判断的方式 通过获取属性如果为undefined 则不存在,另一种方式为使用 in 关键字,但也存在特殊情况。具体示例如下:
1 let user = {); 2 3 alert( user.isExist==undifined) //true 表示这个属性不存在 4 5 alert("isExist" in user); //false 属性不存在 6 7 //特殊情况 8 9 let obj = { 10 test:undefined 11 } 12 13 alert(obj.test==undefined) //false ,但是这个属性存在,所以这时候使用这种方式就不合适 14 alert("test" in obj); //true 表示这个属性存在。
for ... in 循环
1 let user = { 2 name: "John", 3 age: 30, 4 isAdmin: true 5 }; 6 7 for(let key in user) { 8 // keys 9 alert( key ); // name, age, isAdmin 10 // 属性键的值 11 alert( user[key] ); // John, 30, true 12 }
引用复制
1 let user = { name: 'John' }; 2 3 let admin = user; 4 5 admin.name = 'Pete'; // 改变 "admin" 的引用 6 7 alert(user.name); // 'Pete', changes are seen from the "user" reference 8 上面的例子展示了只存在一个对象,就像我们的抽屉有两把钥匙,如果一个钥匙(admin)去使用了
抽屉,稍后使用另外一个钥匙(user)打开的时候,就会看到有变化。
比较引用
1 //两个引用指向同一个对象的时候他们相等。 2 let a = {}; 3 let b = a; // 复制引用 4 5 alert( a == b ); // true,两个变量指向同一个对象 6 alert( a === b ); // true 7 8 //如果是两个不同的属性,他们就不相等,即使都是空的。 9 let a = {}; 10 let b = {}; // 两个独立的对象 11 12 alert( a == b ); // false
常量对象
1 //一个被 const 修饰的对象可以被修改。 2 const user = { 3 name: "John" 4 }; 5 6 user.age = 25; // (*) 7 8 alert(user.age); // 25 9 //但是不能修改user这个对象 10 const user = { 11 name: "John" 12 }; 13 14 // 错误(不能再给 User 赋值) 15 user = { 16 name: "Pete" 17 };
对象复制和合并 Object.assign
复制一个对象的变量也等同于创建了此对象的另一个引用。
1 //用原始的代码操作 2 let user = { 3 name: "John", 4 age: 30 5 }; 6 7 let clone = {}; // 新的空对象 8 9 // 复制所有的属性值 10 for (let key in user) { 11 clone[key] = user[key]; 12 } 13 14 // 现在复制是独立的复制了 15 clone.name = "Pete"; // 改变它的值 16 17 alert( user.name ); // 原对象属性值不变
用Object.assign 来实现
语法:Object.
assign
(
dest[
,
src1,
src2,
src3...
]
)
- 参数
dest
和src1, ..., srcN
(可以有很多个)是对象。 - 这个方法复制了
src1, ..., srcN
的所有对象到dest
。换句话说,从第二个参数开始,所有对象的属性都复制给了第一个参数对象,然后返回dest
。1 let user = { 2 name: "John", 3 age: 30 4 }; 5 6 let clone = Object.assign({}, user);
特殊情况,对象中仍有对象
1 let user = { 2 name: "John", 3 sizes: { 4 height: 182, 5 width: 50 6 } 7 }; 8 9 let clone = Object.assign({}, user); 10 11 alert( user.sizes === clone.sizes ); // true,同一个对象 12 13 // user 和 clone 共享 sizes 对象 14 user.sizes.width++; // 在这里改变一个属性的值 15 alert(clone.sizes.width); // 51