Symbol

作者: Rui___ | 来源:发表于2019-11-12 22:07 被阅读0次
// 数据类型 string number boolean null undefined
// Symbol 独一无二
// 用作常量
//参数  number or string

const s1 = Symbol("www"); // number or string
const s2 = Symbol("www");
console.log(s1 === s2);

// 属性私有化
let s1 = Symbol.for("www");
let s2 = Symbol.for("www"); // 如果symbol已经有值了 就将这个值返回即可
console.log(s1 === s2);
console.log(Symbol.keyFor(s2));//返回里面的值

let obj = {
  [s1]: 1 // es6写法 []含义是将s1 结果取出来作为key
};
console.log(obj[s1]); // 不能使用.运算符



// 元编程 可以改变js源代码的功能 改变js原有的功能
// instanceof // 可以判断某个人是否是谁的实例
let o = {
  name: 1
};
// Symbol.iterator 在我迭代的时候 默认就会调用此方法
let obj = {
  // Object.defineproperty
  [Symbol.hasInstance]() {
    return "name" in o;
  }
};
console.log(o instanceof obj);

let obj={a:1};
console.log(obj+1)


let obj = {
  [Symbol.toPrimitive](value) {
    console.log(value);
    return "hello";
  },
  a: 1
}; // valueOf  toString
console.log(obj * 1);

// toString

const obj = {
  get [Symbol.toStringTag]() {
    return "123";
  }
};
// Object.prototype.toString
console.log(obj.toString()); // [object 123]

// 衍生对象
class MyArray extends Array {
  constructor(...args) {
    super(...args);
  }
  static get [Symbol.species]() {
    return Array; // 控制衍生对象的类的构造函数
  }
}
let myarr = new MyArray(1, 2, 3);
let newArr = myarr.map(item => item * 2); // 衍生出来的结果是当前的实例
// instanceof 原理 .__proto__.__proto__
console.log(newArr instanceof MyArray);
// split replace match search

// with 我可以通过with 直接拿到with中的属性

// 我们可以声明一些属性 不在with中使用
// console.log(Array.prototype[Symbol.unscopables])
// with (Array.prototype) {
//     fill(1,2,3)
// }

class My{
    eat(){}
    get [Symbol.unscopables](){
        return {eat:true};
    }
}
with(My.prototype){
    console.log(eat);
}
let arr = [1,2,3];
arr[Symbol.isConcatSpreadable] = false;
console.log(arr.concat(4,5,6));

相关文章

  • Symbol

    Symbol 每个Symbol都是独一无二的Symbol() !== Symbol() Symbol 不能进行运算...

  • Symbol

    1、window.Symbol 2、不允许new Symbol 3、symbol() !== symbol() 4...

  • Symbol学习笔记

    一.Symbol是什么 typeof Symbol() === 'symbol',symbol是js中第7种基本类...

  • ES6补充以及Node事件轮询

    Symbol es6中新增了symbol类型,symbol类型的值是通过symbol函数生成的,相同symbol函...

  • 深入理解ES6六

    Symbol ES6新增的数据类型Symbol 创建Symbol:通过去全局的Symbol函数创建一个Symbol...

  • JS-学习ES6之-Symbol数据类型[整理稿]

    为什么要有Symbol Symbol可以传参数 Symbol 作为属性名的用法 Symbol.for() 1. 为...

  • Symbol简单理解

    Symbol 概述 作为属性名的symbol 属性名的遍历 Symbol的方法 内置的symbol值 概述 Sym...

  • ES6-新增数据类型

    symbol类型 全局函数window.Symbol() typeof window.Symbol() 返回的类型...

  • ES6-Symbol

    创建Symbol实例let s1 = Symbol()let s2 = Symbol('another symbo...

  • umdh--查找内存泄漏--使用方法

    set _NT_SYMBOL_PATH=symbol目录多个目录,以’;’隔开 例:Set _NT_SYMBOL_...

网友评论

      本文标题:Symbol

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