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

「这是我参与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 中的其他对象

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容