Object对象
Object构造函数为定值创建一个对象容器后,根据定的参数创建对象有几点情况
- 如果传进去的是一个基本类型的值,则会构造包装类型的对象
- 如果传进去的是引用类型的值,返回会返回这个值,复制的变量和源对象有着相同的引用地址
- 如果定义的是null或者undefined,会创建且返回一个空对象
4.如果不非构造函数被调用的时候,Object功能和new Object()一样
Obejct.prototype对象用法
1.Obj.hasOwnProperty(prop)
- 返回一个布尔值,表示某个对象是够含有指定的属性,而且此属性非原型链继承的
复制代码
let obj = new Object();
obj.hasOwnProperty('prop'); //false
obj.prop = '123';
obj.hasOwnProperty('prop'); //true
delete obj.prop;
obj.hasOwnProperty('prop'); //false
复制代码
2.Object.valueOf
- 回指定对象的原始值
let array = [123,‘123’,{a:2}];
console.log(array.valueOf()===array);//true
let bol = true;
console.log(bol.valueOf===bol); // true
let date = new Date(2011,11,11,11);
console.log(date.valueOf); // 1323572400000
function fun() {}
console.log(fun.valueOf() ===fun); // true
复制代码
3.obj.toString();
- 返回当前对象的字符串形式,返回值为String类型
let a = [1,2,3];
console.log(a.toString());// ’1,2,3‘
let b = new Date();
console.log(b.toString()); // "Fri Jun 04 2021 22:09:05 GMT+0800 (中国标准时间)"
let c = {name:www,age:12};
console.log(c.toString()).// '[Object, Object]'
复制代码
4.obj.toLocaleString();
- 返回当前对象‘本地化’字符串形式,返回改对象的字符串表示
let num = 12345;
console.log(num.toLocaleString());//'123,45' 数字每3位添加逗号分隔
let arr = [123456,2,3,3333];
console.log(arr.toLocaleString()); // 123,456,2,3,3,333
复制代码
5.obj.propertyIsEnumerable(prop)
- 返回一个布尔值,指定的属性是否可枚举
var a = {a:333}
var b = [,333,]
obj.b = 77;
arr[5] = 88;
console.log(obj.propertyIsEnumerable('b'));// true
console.log(arr.propertyIsEnumerable(0));// false
console.log(arr.propertyIsEnumerable(1));// true
console.log(arr.propertyIsEnumerable(5));// true
console.log(arr.propertyIsEnumerable('length'));// false
复制代码
6. obj.isPrototypeOf(o);
- 方法用于测试一个对象是否存在于另一个对象的原型链上。
let obj = {name:22};
let o = Object.create(obj);
obj.isPrototypeOf(o); // true
obj.prototype.sPrototypeOf(obj); // true
复制代码
Object对象常用的几个方法
1.Object.assign()
- 用于将所有可枚举属性的值从一个或多个源对象分配到目标对象。它将返回目标对象。
let a = {a:1,b:2};
let b = {c:1,d:2};
let c = {e:1,f:2};
let newObj = Object.assign(a,b,c);
console.log(newObj); // {a:1,b:2,c:1,d:2,e:1,f:2}};
复制代码
2.Object.create()
- 创建一个新对象,使用现有的对象来提供新创建的对象的__proto__。可以同时添加多个属性
function Person(name){
this.name = name;
}
Person.prototype.say = function(){
console.log('我叫' + this.name +',我是'+ this.sex +',我今年 ' + this.age + '岁了');
}
var person = new Person('gwg');
var p = Object.create(person,{
age:{
value: 23,
writable: true,
configurable: true
},
sex:{
configurable: true,
get:function(){return sex + '生';},
set:function(value){sex = value;}
}
});
p.sex = '男';
p.say(); // 我叫gwg,我是男生,我今年 23岁了
console.log(p.sex); // 男生
p.sex = '女';
p.age = 15;
p.name = 'may';
console.log(p.sex); // 女生
console.log(p.age); // 15
p.say(); // 我叫may,我是女生,我今年 15岁了
复制代码
3.Object.keys()
- 返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和正常循环遍历该对象时返回的顺序一致 。
var arr = ['a', 'b', 'c'];
console.log(Object.keys(arr)); // console: ['0', '1', '2']
var obj = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.keys(obj)); // console: ['0', '1', '2']
var anObj = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.keys(anObj)); // console: ['2', '7', '100']
复制代码
4.Object.values()
- 返回一个给定对象自身的所有可枚举属性值的数组,值的顺序与使用for…in循环的顺序相同
const obj = {a:1,b:2};
const keys = Object.values(obj);// [1,2]
// 手动模拟Object.values实现
function getObjectValues(obj) {
const result = [];
for (const prop in obj) {
if(obj.hasOwnProperty(prop)) {
result.push(obj[prop]);
}
}
return result;
}
复制代码
5.Object.defineProperty()
- 直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。
function CustomizeObject() {
var attr = null;
var saveArr = [];
Object.defineProperty(this, 'attr', {
get: function() {
console.log('get attr');
return attr;
},
set: function(value) {
attr = value;
saveArr.push({ val: attr });
}
});
this.getSaveArr = function() { return saveArr; };
}
var obj = new CustomizeObject();
obj.attr; // 'get attr'
obj.attr = 11;
obj.attr = [1,2,3,4];
obj.getSaveArr(); // [{val: 11},{val:[1, 2, 3, 4]}]
obj.attr = {a:5,b:6};
obj.attr = 'gwg';
obj.getSaveArr(); // [{val: 11},{val:[1, 2, 3, 4]},{val: {a: 5, b: 6}},{val: "gwg"}]
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END