阅读 91

Objecct对象属性与方法使用

Object对象

Object构造函数为定值创建一个对象容器后,根据定的参数创建对象有几点情况

  1. 如果传进去的是一个基本类型的值,则会构造包装类型的对象
  2. 如果传进去的是引用类型的值,返回会返回这个值,复制的变量和源对象有着相同的引用地址
  3. 如果定义的是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

  • 回指定对象的原始值

截屏2021-06-04 21.39.40.png

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"}]
复制代码

6.Object.entries();

  • 返回一个数组,其元素是与直接在object上找到的可枚举属性键值对相对应的数组,属性顺序于通过手动循环对象的属性值所给出的顺序相同;
const obj = {a:1,b:2};
console.log(Object.entries(obj));// ['a',1],['b','2']

const obj = {0:'a',1:'b',2:'c'};
console.log(Object.entries(obj));// ['0','a'],['1','b'],['2','c']

const anobj = {100:'a',2:'b',7:'c'};
console.log(Object.entries(obj));// ['2;,'b'],['7','c'],['100','a']

复制代码
文章分类
前端
文章标签