对象的分类:
- 内建对象:由ES标准中定义的对象,在任何的ES的实现中都可以使用。ex:Math,String,Number….
- 宿主对象:由JS的运行环境提供的对象:BOM,DOM。
- 自定义对象:由开发人员自己创建的对象。
对象数据类型的使用
- 创建对象:
- var obj = new Object();
- var obj = { };
上述两者均为创建一个新对象,本质相同。
- 在对象中添加属性(增):
obj.name = “Tom”;
obj.age = 18;
- 删除属性值(删):
delete obj.name;
- 修改属性值(改):
obj.name = “jerry”;
- 读取属性(查):
console.log(obj.name);
检查属性是否存在于对象:console.log(“属性值” in 对象);
ex:console.log(“text” in obj);//返回布尔值
对象属性不强制要求标识符规范,命名无要求,特殊字符及数字命名需要obj[“…”],取也需如此。
var obj = {};obj["123"] = 789;var n = "123";console.log(obj["123"]);console.log(obj[n]); // 这两个输出效果相同,均为直接读取n的值
var obj = {name:"Tom" ,age:18 ,test:{name:"jerry"} // 在对象里添加对象时,内对象要用":"而不是"="。};
对象的遍历
Object.keys(obj);
返回对象属性名的数组
for…in
let obj = {a:1, b:2, c:3};for (let prop in obj) {console.log("obj." + prop + " = " + obj[prop]);}// Output:// "obj.a = 1"// "obj.b = 2"// "obj.c = 3"
判断对象中是否包含某一属性
in'a' in obj //返回值为布尔值
对象的引用
obj1 = obj2;:将obj2的地址赋给obj1,而不是值
用const定义时也可以修改存储值,因为const定义的引用地址没变obj1 = obj3;:将obj3的地址覆盖obj2的地址
向函数参数传递数据,对函数的参数来说传递的是值,对对象来说传递的是引用。在内层对对象的引用做出改变,外层对象的引用不变。
let obj1 = {num: 001};function demo(obj){console.log(obj); //{num:001}obj = null;console.log(obj); //null}(obj1);console.log(obj1); //{num:001}
虽然引用关系不变,但内容在内部被更改后外部也同时被更改
let obj1 = {num: 001};function demo(obj1){obj.num = 002;console.log(obj); //{num:002}}(obj1);console.log(obj1); //{num:002}
