zoukankan      html  css  js  c++  java
  • JS 对象(对象遍历,拷贝)

     定义属性

    • 直接 obj.对象 的方法
    • Object.defineProperty(obj, prop, descriptor) ,这种方法可以设置 或者修改对象属性的访问权限

        数据描述符和存取描述符均具有以下可选键值:

    configurabl
      当且仅当该属性的 configurable 为 true 时,该属性描述符才能够被改变,同时该属性也能从对应的对象上被删除。默认为 false
    enumerable
      当且仅当该属性的enumerable为true时,该属性才能够出现在对象的枚举属性中。默认为 false
    数据描述符同时具有以下可选键值:

    value
      该属性对应的值。可以是任何有效的 JavaScript 值(数值,对象,函数等)。默认为 undefined
    writable
      当且仅当该属性的writable为true时,value才能被赋值运算符改变。默认为 false

    对象合并

      Object.assign(target,source1,source2)  

      Return  返回合并后的新对象

      注意  

        如果合并的对象中有相同的属性,那么后面的会覆盖前面的

    var obj = {
        name : '小白',
        color : 'white'
    }
    var obj1 = {
        say : function(){
            console.log('汪汪');
        }
    }
    var obj2 = {
        name : '小黑'
    }
    var newObj = Object.assign(obj,obj1,obj2)
    console.log(newObj.name);    //输出  小黑
    newObj.say();    

    判断属性是否存在

      Object.hasOwnProperty()

      存在 返回true    不存在  返回false

    获得对象属性

      Object.keys   返回一个数组中包含所有属性名

      Object.values    返回一个数组中包含所有属性值

    遍历属性

    • for...in...  最常见的一种方式,可以遍历对象当前所有可见属性,包括原型中定义的属性
    • Object.keys  获得对象所有可见属性的属性名,不包括原型中定义属性
    • Object.getOwnPropertyNames   获得对象所有属性,不包括原型中定义属性
    function Dog(name,color){
        this.name = name;
        this.color = color;
    }
    Dog.prototype = {
        foods : ['bones','meat'],
        say : function(){
            console.log('汪汪');
        },
        eat : function(){
            console.log('i am '+this.nam+' i eat '+this.foods.join(','));
        }
    
    }
    var xiaohei = new Dog('小黑','black');
    Object.defineProperty(xiaohei,'name',{enumerable:false});
    console.log(Object.keys(xiaohei));
    //输出  ["color"]
    console.log(Object.getOwnPropertyNames(xiaohei));
    //输出  (2) ["name", "color"]
        

    对象拷贝 

    浅拷贝 : 即拷贝当前对象地址给一个新的对象,任何对象改变会引起其他对象改变

    var xiaohei = new Dog('小黑','black');
    var xiaoheihei = xiaohei ;    //对象浅拷贝
    xiaoheihei.name = '小黑黑'
    console.log(xiaohei.name);
    //输出  小黑黑

    深拷贝 : 即将对象所有属性和方法拷贝一份给一个新的对象

    var xiaohei = new Dog('小黑','black');
    var xiaobai = {};
    for(let key in xiaohei){
        xiaobai[key] = xiaohei[key]
    }
    xiaobai.name = "小白"
    console.log(xiaohei.name);
    //输出  小黑

    数组拷贝

    数组与对象类似,都属于引用型变量,因此直接使用 = 只是拷贝地址,如需要拷贝数组,可以使用 slice 方法

    var arr = [1,2,3,4] ; 
    arr1 = arr ;        //浅拷贝
    arr2 = arr.slice(0);    //深拷贝
    arr[0] = 'hello' ;
    console.log(arr1);    //'hello',2,3,4
    console.log(arr2);    //1,2,3,4
  • 相关阅读:
    vue-d2admin-axios异步请求登录,先对比一下Jquery ajax, Axios, Fetch区别
    beego 前后端分离登录验证
    Beego没gin配置静态页面方便
    beego-vue URL重定向(beego和vue前后端分离开发,beego承载vue前端分离页面部署)
    Go程序员面试算法宝典-读后感2-链表
    Go程序员面试算法宝典-读后感1
    bee api new
    golang-结构体的使用
    golang-笔记2
    golang-笔记1
  • 原文地址:https://www.cnblogs.com/xiaoliwang/p/9043876.html
Copyright © 2011-2022 走看看