js.Symbol 介绍及应用

应用场景

1.Symbol()-->解决属性名的冲突,因为传入对象属性时,同样的Symbol不相等;
解释:什么是冲突呢?当多人合作编码的时候,经常会出现你往对象上加了一个某某属性(比如 $ ),他人正好也想到了这个名称,当你们同时用了这个名称作为属性,代码之间就会发生冲突,互相覆盖。而用 symbol,即使都用了相同的描述,也不是同一个 symbol。

2.Symbol.for()-->共享Symbol,因为返回值得不一样,keyFor()用来查看它的描述

新的基本类型

null,underfined,number,boolean,string,object

基本判断

typeof Symbol() === 'symbol'

特点

1.Symbol('key') !== Symbol('key')  //true,返回不同
2.Symbol("know").name = 1; // TypeError,只读
3.for...in 、 Object.keys(obj) 、Object.getOwnPropertyNames(obj)会忽略Symbol,即自身不可枚举
4.不能用obj.prop的形式访问

创建

var obj = {
    a: 1
};
var safeKey = Symbol("know");
console.log(safeKey);//Symbol(know)
obj[safeKey] = 'value';
console.log(obj[safeKey]);  // value

查询

1.Object.getOwnPropertySymbols(obj) //获取Symbol属性名,但是也会忽略内置的Symbol
2.Reflect.ownKeys(obj)//获取所有的属性名

js.Symbol 代替

let obj = {
    [Symbol.replace](string) {
        console.log(string);
        return "replllll";
    }
};
console.log( "sssss".replace(obj) ); //输出:  sssss    replllll

js.Symbol 迭代器js.Symbol 迭代器

Symbol.Iterator:对象的Symbol.Iterator属性, 指向这个对象的默认遍历器:

var myIterable = {};
myIterable[Symbol.iterator] = function* () {
    yield 1;
    yield 2;
    yield 3;
};
console.log([...myIterable]); // [1, 2, 3]

js.Symbol 私有属性

var Person = (function() {
  let _name = Symbol();
  class Person {
    constructor(name) {
      this[_name] = name;
    }
    get name() {
      return this[_name];
    }
  }
  return Person;
})();


//es5简单代替方法,但是查看属性名的时候会发现垃圾字符串
var Person = (function() {
  var _name = "00" + Math.random();
  function Person(name) {
    this[_name] = name;
  }
  Object.defineProperty(Person.prototype, "name", {
    get: function() {
      return this[_name];
    }
  });
  return Person;
})();

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 官方中文版原文链接 感谢社区中各位的大力支持,译者再次奉上一点点福利:阿里云产品券,享受所有官网优惠,并抽取幸运大...
    HetfieldJoe阅读 2,610评论 9 22
  • 一、ES6简介 ​ 历时将近6年的时间来制定的新 ECMAScript 标准 ECMAScript 6(亦称 ...
    一岁一枯荣_阅读 6,119评论 8 25
  • ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值。它是JavaScript语言的第七种数据类型,前...
    语目阅读 3,938评论 0 3
  • 特别说明,为便于查阅,文章转自https://github.com/getify/You-Dont-Know-JS...
    杀破狼real阅读 678评论 0 1
  • 却心头,徒悲添。道是有时珠儿连,别霄风雨兮,可耐回头。 天涯笑,涟涟波。欢字儿作头流水去,也罢,也罢,木槿锦...
    往往以往阅读 206评论 1 0