美文网首页javascript
js.Symbol 介绍及应用

js.Symbol 介绍及应用

作者: 许道龙 | 来源:发表于2016-07-15 10:02 被阅读0次

应用场景

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;
})();

相关文章

  • js.Symbol 介绍及应用

    应用场景 新的基本类型 null,underfined,number,boolean,string,object ...

  • DelayQueue介绍及应用

    概念: DelayQueue是一个无界阻塞队列,用于放置实现了Delayed接口的对象,只有在延迟期满时才能从中提...

  • mongoose介绍及应用

    mongoose介绍及基本使用 标签(空格分隔): 未分类 两种和数据库交互的方式 使用原生语言查询 eg:sel...

  • React介绍及应用

    React介绍 react不是一个mvc的框架,它仅仅是V层。它是一个鼓励构建随着数据变化而改变UI表现的库。 R...

  • ViewPager介绍及应用

    一、简介 Viewpager,视图翻页工具,提供了多页面切换的效果。Android 3.0后引入的一个UI控件,位...

  • 销售产品

    对SI: 产品介绍及应用场景介绍; 产品测试;(让SI理解及放心) 成功案例; (让SI学习复制...

  • React简单介绍及应用

    React介绍 react不是一个mvc的框架,它仅仅是V层。它是一个鼓励构建随着数据变化而改变UI表现的库。 R...

  • React简单介绍及应用

    React介绍 react不是一个mvc的框架,它仅仅是V层。它是一个鼓励构建随着数据变化而改变UI表现的库。 R...

  • Bootstrap的介绍及应用

    官网:https://www.bootcss.com/ 1.什么是 Bootstrap ? 使用 Bootstr...

  • swift协议介绍及应用

    协议规定了用来实现某一特定功能所需的方法和属性。 任意能够满足协议要求的类型被称为遵循(conform)这个协议。...

网友评论

    本文标题:js.Symbol 介绍及应用

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