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

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

写在前头

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


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


思维导图

微信截图_20221111183714.png


脉络

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


3.4数据类型

微信截图_20221111183725.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 类型

微信截图_20221111183737.png


ECMAScript 中的对象本质

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


创建对象

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

var object = new Object();
复制代码


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

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


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

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

  • constructor
  • hasOwnProperty(propertyName)
  • isPrototypeOf(object)
  • propertyIsEnumerable(propertyName)
  • toLocaleString()
  • toString()
  • valueOf()


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

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



目录
相关文章
|
1月前
|
Python
通过 type 和 object 之间的关联,进一步分析类型对象
通过 type 和 object 之间的关联,进一步分析类型对象
51 3
|
20天前
|
JavaScript 前端开发 大数据
在JavaScript中,Object.assign()方法或展开语法(...)来合并对象,Object.freeze()方法来冻结对象,防止对象被修改
在JavaScript中,Object.assign()方法或展开语法(...)来合并对象,Object.freeze()方法来冻结对象,防止对象被修改
12 0
|
4月前
|
SQL 安全 Java
Android经典面试题之Kotlin中object关键字实现的是什么类型的单例模式?原理是什么?怎么实现双重检验锁单例模式?
Kotlin 单例模式概览 在 Kotlin 中,`object` 关键字轻松实现单例,提供线程安全的“饿汉式”单例。例如: 要延迟初始化,可使用 `companion object` 和 `lazy` 委托: 对于参数化的线程安全单例,结合 `@Volatile` 和 `synchronized`
55 6
|
5月前
|
Java
Object当中的object类型
Object当中的object类型
|
6月前
|
前端开发 Java 编译器
Object c/swift,java,c/c++在32位和64位各个平台上基本数据类型 所占有的字节数
Object c/swift,java,c/c++在32位和64位各个平台上基本数据类型 所占有的字节数
46 0
|
6月前
|
JavaScript 前端开发 Java
编程笔记 html5&css&js 073 JavaScript Object数据类型
编程笔记 html5&css&js 073 JavaScript Object数据类型
|
6月前
|
JavaScript 前端开发
js基础语法:包括变量声明、数据类型(Number, String, Boolean, Null, Undefined, Symbol, Object)、运算符、流程控制语句(if...else, switch, for, while, do...while)等。具体案例使用演示
js基础语法:包括变量声明、数据类型(Number, String, Boolean, Null, Undefined, Symbol, Object)、运算符、流程控制语句(if...else, switch, for, while, do...while)等。具体案例使用演示
74 1
|
6月前
|
Java 数据库
Java【问题记录 04】时间戳类型字符串{Timestamp@15601}2021-07-14 18:56:53.0变成带T的Object类型2021-07-14T10:56:53.000+0000
Java【问题记录 04】时间戳类型字符串{Timestamp@15601}2021-07-14 18:56:53.0变成带T的Object类型2021-07-14T10:56:53.000+0000
46 0
|
6月前
|
JavaScript 前端开发
JavaScript基础语法:包括变量声明、数据类型(Number, String, Boolean, Null, Undefined, Symbol, Object)、运算符、流程控制语句(if...else, switch, for, while, do...while)等。
JavaScript基础语法:包括变量声明、数据类型(Number, String, Boolean, Null, Undefined, Symbol, Object)、运算符、流程控制语句(if...else, switch, for, while, do...while)等。
63 0
|
JavaScript 编译器
TypeScript-never和object类型、类型断言概述
TypeScript-never和object类型、类型断言概述
56 0