美文网首页深究JavaScript前端带你读红宝书
带你读书之“红宝书”:第三章 语法基础(中)之 数据类型中部分

带你读书之“红宝书”:第三章 语法基础(中)之 数据类型中部分

作者: 前端不许笑 | 来源:发表于2022-01-29 21:09 被阅读0次

    「这是我参与2022首次更文挑战的第12天,活动详情查看:2022首次更文挑战

    写在前头

    大多数小伙伴看技术书籍都会用“啃”来描述读书的直观感受,当然我也是一个前端小白,白的透明那种,但是我在读技术书籍感觉到“啃”的时候,我希望把我啃红宝书第四版的过程的想法,总结带给大家,以供后来者能够更快上手。

    注: 本文由于作者水平原因,如有错误之处,恳请大家指正,另外随着学习的深入,体会的加深,我会不断回来更新,修改这类文章。

    思维导图

    image.png

    脉络

    这小节就是介绍了3.4数据类型中的3.4.7. Symbol 类型,3.4.8. Object 类型。

    3.4数据类型

    image.png

    3.4.7. Symbol 类型

    符号是原始值,用途

    符号实例是常量,符号实例是唯一、不可变的。

    用途:确保对象属性使用唯一标识符,不会发生属性冲突的危险。

    1. 符号的基本用法

    • Symbol()函数初始化
      使用 Symbol()函数初始化,不用new!

      var symbol = new Symbol();
      
    • 字符串参数

      ①对符号的描述,调试代码

      ②与符号定义或标识完全无关

    • 没有字面量语法

    • 不与new关键字做构造函数

    为了避免包装对象,和number,Boolean,string不同。确实想使用符号包装对象

    • 结合Object()函数,符号包装对象

    类似数据类型转换,将将符号作为参数传入。

       const sym = Symbol();
       const sym = Number(sym);
       console.log(typeof sym); // object
    

    2. 使用全局符号注册表

    • 运用System.for()方法。

    Symbol.for()对每个字符串键都执行幂等操作。第一次使用某个字符串调用时,它会检查全局运行时注册表,发现不存在对应的符号,于是就会生成一个新符号实例并添加到注册表中。后续使用相同字符串的调用同样会检查注册表,发现存在与该字符串对应的符号,然后就会返回该符号实例。(书中原话)。

    对比

            const sym = Symbol('sym');
            const othersym = Symbol('sym');
    
            console.log(sym == othersym); // false
    
            const foo = Symbol.for('foo');
            const otherfoo = Symbol.for('foo');
    
    // 即使采用相同的符号描述,在全局注册表中定义的符号跟使用 Symbol()定义的符号也并不等同
            console.log(foo == otherfoo); // true
            
             const xoo = Symbol('xoo');
            const otherxoo = Symbol.for('xoo');
    
            console.log(xoo == otherxoo); // false
    
    • 必须使用字符串键

    • 键同时也会被用作符号描述

    • Symbol.keyFor()来查询全局注册表

    3. 使用符号作为属性

    凡是可以使用字符串或数值作为属性的地方,都可以使用符号

    * Object.defineProperty()/Object.defineProperties()
    
    * Object.getOwnPropertyNames()返回对象实例的常规属性数组
    
    * Object.getOwnPropertySymbols()返回对象实例的符号属性数组
    
    * Object.getOwnPropertyDescriptors()会返回同时包含常规和符号属性描述符的对象
    
    * Reflect.ownKeys()会返回两种类型的键
    

    4. 常用内置符号

    • 开发者可以直接访问、重写或模拟这些行为

    • 是全局函数 Symbol 的普通字符串属性,指向一个符号的实例

    • 所有内置符号属性都是不可写、不可枚举、不可配置的

    后续先鸽了(o)/~

    3.4.8. Object 类型

    image.png

    ECMAScript 中的对象本质

    ECMAScript 中的对象其实就是一组数据和功能的集合。对象其实就是包含了很多的属性和方法的集合。

    创建对象

    一般通过new关键字来创建对象实例。

    var object = new Object();
    

    Object 也是派生其他对象的基类

    Object就是最大的对象,其他对象都会继承他的属性和方法。

    Object 实例都有如下属性和方法

    这些方法和属性是所有对象都拥有的。

    • constructor

    • hasOwnProperty(propertyName)

    • isPrototypeOf(object)

    • propertyIsEnumerable(propertyName)

    • toLocaleString()

    • toString()

    • valueOf()

    ECMA-262 中对象的行为不一定适合JavaScript 中的其他对象

    由宿主环境定义和提供的宿主对象,由宿主环境定义和提供的宿主对象。

    相关文章

      网友评论

        本文标题:带你读书之“红宝书”:第三章 语法基础(中)之 数据类型中部分

        本文链接:https://www.haomeiwen.com/subject/rtpfkrtx.html