zoukankan      html  css  js  c++  java
  • 对象(Object)相关

    详情参考

    1.对象的表示方法

    js原生提供Object构造函数。js中所有的对象都是Object的实例。

    定义一个对象最简单的就是var obj = {};

    ES6属性和方法允许简写。对象的super属性只能用在简写的方法中,其他的地方都会报错。

    let a = 5;
    let obj = { 
        a, // 相当于a: a
        b() {
            return 'lyra'
        }
    }; 

    属性可以使用存取器表示。存取器的使用场合一般是: 属性的值依赖对象内部数据。

    var obj = {
       count: 5,
       get v() { return this.count },
       set v(value) { this.count += value;}
    }
    obj.v; //5
    obj.v = 10;
    obj.v; // 15

    2.属性名

    对象要求属性名必须是字符串,如果不是字符串,js引擎会自动将其转为字符串。

    var obj={
        1e2: 'a',
        0xff: 'b', // 会先计算出键值
        .23: 'c',
        _a: "e"
    }
    // var obj = { 
    //     100: 'a',
    //     255: 'b',
    //     '0.23': 'c',
    //     _a: 'e' 
    // } 

    ⚠️如果属性名不是有效的变量标识符,字符串不能省略。

    ES6

    1)属性名表达式,允许属性名通过[]用表达式准备。[]内有字符串说明是属性名,[]没有字符串说明是变量。

    var obj = {
        ['a' + 'b']: 5,
        ['h'+'hello']() {
            // 这是一个函数
        }
    }

    2)添加Symbol类型的属性名

    3.对象方法的name属性

    name属性返回函数的名称。

    .bind()的函数会返回“bond 函数名”;匿名函数"anoymous";对象的方法名为Symbol("函数名")返回引号中函数名

    4.属性遍历的方法

    遍历规则:

    1)先遍历数字属性,从小到大

    2)遍历字符串属性,按照时间从早到晚(push的最早的)

    3)遍历Symbol属性,按照时间从早到晚

    属性遍历方法:

    1)for...in   遍历原型和自身的可枚举属性(不含Symbol)

    2)Object.keys() --返回数组,数组元素是自身可枚举属性(不含Symbol)

    3)Object.getOwnPropertyNames 遍历自身可枚举和不可枚举属性(不含Symbol)

    ES6

    4)Object.getOwnPropertySymbols()遍历自身的Symbol属性

    5)Reflect.ownKeys() 遍历自身的所有属性

    值遍历方法

    1)Object.values()---返回数组

    2)Object.entries()---返回二维数组

    PS:Object.fromEntries()将Map转为对象;或者Object.Entries()遍历的结果(二维数组)转为对象

    5.Object.assign(target, ...sources)和扩展运算符...

    ES6

    1)相同点: 两者相当于另一种形式的遍历,针对的都是可枚举类型

    {...null} {...1} {...true} {...undefined}都是{},因为自动转换生成的对象的属性都是不可遍历的属性或者是{}{}

    {...'he'} -- {0: 'h', 1: 'e'}

    不同点:前者的target参数不能是null和undefined; ...可以是null和undefined

    ⚠️:...(表达式) ---扩展运算符可以跟表达式

    2)对象的拷贝

    浅拷贝--遍历拷贝第一层属性。如果属性值是对象,则拷贝的是对象的地址。

    ⚠️:创建了一个新对象,并将第一层属性拷贝过去。

    let a = Object.assign({},obj); // a != obj
    let a = {...obj}; // a != obj
    let a = obj; a=== obj;

    对象的完整克隆规则:1.原型对象相同;2.自身属性相同

    Object.assign(Object.create(Object.getPrototypeOf(obj)),obj)
    Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj))

    6.Object.is(a,b)

    功能基本和===相同。

    区别: 1)Object.is(NaN, NaN) --true  2) Object.is(+0, -0) -- false

    7.原型对象

    1)prototype属性是构造函数的属性,实例对象没有该属性

    2) __proto__实例对象的属性,表示该实例对象的原型对象

    2)读取,设置原型对象

     ---1.__proto__浏览器实例对象的私有属性,可以读取,写入,但是不建议使用

     ---2.getPrototypeOf(),setPrototypeOf

     ---3.Object.create(原型对象,属性描述对象)⚠️如果属性缺省,默认false, value默认undefine

  • 相关阅读:
    转载 centos7安装kafka_2.11-1.0.0 新手入门(集群)
    Kafka得介绍与单节点部署
    MVC Areas
    Session如何保存在sql数据库中
    AsposeCell特定格式表格
    DataTable数据修改,换列
    A1095 Cars on Campus (30 分)
    A1075 PAT Judge (25 分)
    A1016 Phone Bills (25 分)
    A1082 Read Number in Chinese (25 分)
  • 原文地址:https://www.cnblogs.com/lyraLee/p/11552858.html
Copyright © 2011-2022 走看看