元编程就是指以操作目标为程序本身的行为特性的编程,而在ES6中增加了类型symbol,除了自定义的符号之外,还预定义了其他的一些内置符号,可以被称为内置符号。下面就来给大家介绍一下这些内置符号。

1、Symbol.iterator

这个符号表示任意对象上的一个专门的属性,语言机制会自动的在这个属性上寻找一个方法,这个方法会构造一个迭代器来消耗这个对象的值。… 展开和 for…of 循环会自动使用它。

我们也可以通过自定义 Symbol.iterator 属性为任意对象值定义自己的迭代器逻辑,它将覆盖默认的迭代器。我们相当于是定义了一种元编程的行为,提供给JavaScript其他部分(也就是运算符和循环结构)在处理定义的对象时使用。

2、Symbol.toStringTag 与 Symbol.hasInstance

在日常逻辑中经常出现的一个场景,判断一个值是什么类型,通常使用的是 toString() 和 instanceof 。

现在 ES6 中,可以定义这些操作的行为特性了。

通过以上案例我们可以看出:

toStringTag 符号指定了在 [object XXXX] 字符串化时使用的字符串值。

hasInstance 符号是在构造器函数上的一个方法,接受实例对象值,通过返回 true 或者 false 来显示这个值是否可以被认为是一个实例。

在 Function.prototype 上 hasInstance 默认的 writable 是 false,不可写入。可以通过 Object.defineProperty() 来绕开它。

3、Symbol.species

这个符号控制要生成新的实例时,类的内置方法使用哪一个构造器。 内置原生构造器 Symbol.species 的默认行为是 return this 。 如果要定义生成新的实例的方法,使用new this.constructorSymbol.species ,然后继承的类就可以根据它来控制由哪个构造器来产生这些实例。

4、Symbol.toPrimitive

在ES6之前,对象为了某个操作(例如相加 + 或比较 == )必须强制转换为原生类型时,是无法控制该行为的 ,现在可以通过Symbol.toPrimitive这个符号来控制这个行为。

Symbol.toPrimitive 方法根据调用 ToPrimitive 的运算期望的类型,会提供一个类型(type) 指定 “string”、“number” 或 “default”。

以上就是es6 symbol的介绍了,希望能帮到大家。

本文来自千锋教育,转载请注明出处。

前端技巧-JS元编程ES6 symbol公开符号相关推荐

  1. 前端技巧|JavaScript面向对象编程理解

    对编程有了解的同学都知道,面向对象是一个非常难以理解的概念,下面给大家分享一下对象object的理解,本篇文章主要分享面对对象的封装.当然现实生活中面向对象也挺难的,哈哈哈~       一,关于实例 ...

  2. JavaScript—ES6 元编程(5)

    几年前 ES6 刚出来的时候接触过 元编程(Metaprogramming)的概念,不过当时还没有深究.在应用和学习中不断接触到这概念,比如 mobx 5 中就用到了 Proxy 重写了 Observ ...

  3. 前端复习——js(四)

    前端复习--js 面向对象编程 面向对象编程介绍 面向过程POP(Process-oriented programming) 面向对象OOP(Object Oriented programming) ...

  4. promise 浏览器实现的源码_【大前端01-01】函数式编程与JS异步编程、手写Promise...

    [简答题]一.谈谈你是如何理解JS异步编程的,EventLoop.消息队列都是做什么的,什么是宏任务.什么是微任务? 如何理解JS异步编程 众所周知JavaScript语言执行环境是"单线程 ...

  5. 你不知道的JavaScript(十一):元编程 - 公开符号

    Symbol.iterator var arr = [4, 5, 6, 7, 8, 9]; for (var v of arr) {console.log(v); // 4 5 6 7 8 9 }// ...

  6. 《JavaScript权威指南第7版》第14章 元编程

    第14章 元编程 14.1 属性特性 (Property Attributes) 14.2 对象扩展性 14.3 prototype特性(原型特性) 14.4 内置Symbol 14.4.1 Symb ...

  7. JavaScript 元编程

    大家好,我是若川.今天给分享一篇来自freecodecamp的好文.我是freecodecamp杭州社区组织者之一,有一群小伙伴一起组织线下分享活动,不过2020年我们杭州社区几乎没有活跃,我也没有什 ...

  8. 前端面试 - JS总结(1) - 基础 (数据类型, 事件与函数, 原型链)

    你不走出舒适圈,又怎么知道自己多坚强?! 前端面试 - JS总结(1) - 基础 (数据类型, 事件与函数, 原型链) 前端面试 - JS总结(2) - ES6 (let, 箭头函数, this) 前 ...

  9. 前端学习--js.2

    写一个通用的事件侦听器函数 markyun.Event = { //页面加载完成后 readyEvent :function(fn) { if(fn==null) { fn=document; } v ...

最新文章

  1. 深圳大学计算机暑期学校,The First Day-深度学习暑期学校
  2. 新晋 ACM Fellow 陶大程,8 篇 NeurIPS 论文详解
  3. Java学习笔记3——继承
  4. CEikEdWin 类的使用
  5. 现代密码学3.4--CPA安全,多次加密
  6. 全球及中国甲基丙烯酸烷基酯行业深度研究与未来投资潜力分析报告2022版
  7. 【译】Jumping into Solidity — The ERC721 Standard (Part 4)
  8. python语言格式化输出_Python字符串格式化输出
  9. app canvas渲染后图片黑色_H5 基于 canvas 实现电子签名并生成PDF文档
  10. 如何在数字化转型战略中真正获得价值?浅谈数字化转型的四个层级
  11. 故宫学生网页设计作品 dreamweaver作业静态HTML网页设计模板 旅游景点网页作业制作
  12. 向上累积频数怎么算_视频号怎么运营?小白也能迅速get的技巧
  13. python在统计中的应用_Python在简单数据统计中的应用--随笔记
  14. 在Spark上运行WordCount程序
  15. 23个Python爬虫开源项目代码:微信、淘宝、豆瓣、知乎、微博等。我要做马来人...
  16. 计算机系统的主要性能指标有哪些?,计算机系统组成及主要性能指标
  17. sq工程师是做什么的_供应商质量工程师(SQE)是一个什么样的职位?
  18. ctfshow-萌赛
  19. win7系统 将 IE11 改为 IE8
  20. python清洗数据 food ounces animal_Wonz 的动态 - SegmentFault 思否

热门文章

  1. 传智播客python笔记_python传智播客笔记--第十天:隐藏属性,私有属性,私有方法,__del__方法,类的继承,类中方法的重写...
  2. stolz定理考研能用吗_重磅,考研数学最后重点预测
  3. 【SpringBoot集成ElasticSearch 02】Java HTTP Rest client for ElasticSearch Jest 客户端集成(配置+增删改查测试源码)【推荐使用】
  4. python平稳性检验_Python数据分析0.3 用statsmodels进行ADF平稳性检验
  5. python 主语_前深度学习时代--FFM模型的原理与Python实现
  6. LeetCode 11 盛最多水的容器
  7. JavaScript——定时器(setTimeout/setInterval)
  8. CG CTF WEB 这题不是WEB
  9. 中国科学院计算机专业职称,2018年春季工程技术系列专业技术资格职称评审结束...
  10. 2003服务器被入侵,如果还原Gest用户,删除隐藏用户