一、Object 对象,同时也是一个构造函数。
Object 对象提供了很多操作对象的属性和方法,也是对应的原型。
1.Objcet() 作为函数使用 可以把其他数据类型转为一个包装对象
<script>
var a = Object("a");
// 传入字符串就可以包装为字符串对象,传入number 可以包装为number对象
console.log(a); //--> String
</script>
2.Object( ) 作为构造函数 。如果传入对象,则直接把对象返回
<script>
var b = Object ({name:"1"});
console.log(b);
</script>
3.直接调用Object方法,可以创建一个空对象
<script>
var c = new Object();
c.name = "a";
console.log(c); //---> {name: 'a'}
var c1 = {name : "c"};
console.log(c1); // ---> {name: 'c'}
</script>
4.可以给Object 对象的 原型添加自定义方法或属性 ,所有原型是Object的对象都有该方法
<script>
//给object对象原型添加一个count方法
Object.prototype.count = function(){
console.log("自定义方法");
}
var d1 ={name:"b"};
//调取count方法
d1.count(); // ---> 自定义方法
</script>
5.instanceof 运算符返回一个bool值,表示对象是否为某个构造函数的实例
所有的对象都是Object 构造函数的实例
<script>
function Peo (){
this .name = "peo";
}
var pe1 = new Peo();
console.log (pe1);
var pe2 = {};
console.log(pe1 instanceof Peo); //true
console.log(pe2 instanceof Peo); // false
console.log(pe2 instanceof Object); // true
console.log(pe1 instanceof Object); // true
</script>
6. Object.getPrototypeof(obj)
返回参数对象的原型,也是获取对象原型的标准方法
直接赋值不能通过get读取对象的原型
<script>
function Peo(){
this.name = "name";
}
var pe1 = new Peo( );
console.log(Object.getPrototypeOf(pe1)); // ---> {constructor: ƒ}
</script>
7.Object.setPrototypeof(a,b)
设置a对象的原型对象为b。 getPrototypeOf可以读取到该原型对象
<script>
//利用set 修改pe3的原型对象
Object.setPrototypeOf(pe3,{value : "test"});
//用get可以读取
console.log(Object.getPrototypeOf(pe3));//---> {value: 'test'}
</script>
8.Object.create(a,b)
以对象a为原型,创建一个新的对象b。b对象需要的属性需要用对象属性描述方式
<script>
//创建一个对象 有name属性和age属性
var cat = {name :"cat",age :"12"};
//以对象cat 为原型,创建一个新的对象cat1 新对象的属性tnmae 值需要用对象属性描述方法
var cat1 =Object.create(cat,{tname:{value:"ca1"}});
console.log(cat1); //---> {tname: 'ca1'}
</script>
9.prototye.isPrototypeOf(obj)
判断一个对象是否为参数对象的原型
<script>
//创建一个对象 有name属性和age属性
var cat = {name :"cat",age :"12"};
//以对象cat 为原型,创建一个新的对象cat1 新对象的属性tnmae 值需要用对象属性描述方法
var cat1 =Object.create(cat,{tname:{value:"ca1"}});
console.log(cat1); //---> {tname: 'ca1'}
//判断cat1的原型是否为cat的原型
console.log(cat.isPrototypeOf(cat1)); // ---> true
</script>
10. __ proto__
返回对象的原型
<script>
var cat = {name :"cat",age :"12"};
//以对象cat 为原型,创建一个新的对象cat1 新对象的属性tnmae 值需要用对象属性描述方法
var cat1 =Object.create(cat,{tname:{value:"ca1"}});
//输出对象cat1的原型
console.log(cat1.__proto__); // ---> object
</script>
11.hasOwnProperty(prop)
用于查看属性是否为对象自身的属性。true则是自身属性,false是原型属性
:原型上的属性不属于自身属性
var cat = {name :"cat",age :"12"};
//以对象cat 为原型,创建一个新的对象cat1 新对象的属性tnmae 值需要用对象属性描述方法
var cat1 =Object.create(cat,{tname:{value:"ca1"}});
console.log (cat1.hasOwnProperty("tname")); // --> true
console.log (cat1.hasOwnProperty("name")); // --> false
</script>
12 Object.keys(obj)
遍历对象的所有key值 。(只能遍历对象自有的属性 不能遍历对象原型上的属性)
<script>
//12.用Object.key(obj)遍历
//创建一个dog类 有name、age属性
function dog () {
this.name = "nana";
this.age = 9;
}
var dog1 = new dog();
//给dog1 添加一个 go的属性
Object.setPrototypeOf(dog1,{move:"wangwang"});
//遍历dog对象里面的属性(key) ---> 只能遍历对象自有的属性 不能遍历对象原型上的属性
console.log(Object.keys(dog1));
//遍历dog对象里面的属性值 .forEach(function(item,index){ }) //数组遍历元素的方法
Object.keys(dog1).forEach(function(key){
console.log(dog1[key]); // --->输出属性值
});
</script>
13.Object.values(obj)
遍历对象的所有value值 。(只能遍历对象自有的属性 不能遍历对象原型上的属性)
<script>
//13.用Object.value(obj)遍历
//创建一个dog类 有name、age属性
function dog () {
this.name = "nana";
this.age = 9;
}
var dog1 = new dog();
//给dog1 添加一个 go的属性
Object.setPrototypeOf(dog1,{move:"wangwang"});
//遍历value值
console.log(Object.values(dog1)); //----> ['nana', 9]
</script>
----->
获取对象的 keys 数组:Object.keys(obj)
获取对象的 values 数组:Object.values(obj)
<script>
function dog(name,age){
this.name = name ;
this.age = age ;
}
var dog1 = new dog ("nana",9);
console.log (dog1);
console.log(Object.keys(dog1));
console.log(Object.values(dog1));
</script>
14.Object.toString( )
返回对象的类型字符串(对象的类型字符串就是object),第一个是对象字符串类型object,第二个参数是该值的构造函数
<script>
var dog1 = {name:"dog1"}
console.log(dog1+"") //[object Object]
console.log(dog1.toString()) // [object Object]
// 用该方法可以更精准的判断数据类型
/* Object的toString内部的this指向的是Object对象,
用call方法改变this的执行,可以把this执行为需要判断的数据,
toString返回的第二个参数则是产生该值的构造函数(js的字符串,数字等在js运行时都会包装为对应的对应) */
console.log(Object.prototype.toString.call(2)) // [object Number] 为number类型
console.log(Object.prototype.toString.call({})) // [object Object] 为对象类型
console.log(Object.prototype.toString.call('')) // [object String] 字符串类型
console.log(Object.prototype.toString.call(true) === "[object Boolean]") // [object Boolean]
console.log(Object.prototype.toString.call([])) // [object Array]
</script>