首页 > 技术文章 > Symbol基础

wahaha- 原文

ES6引入了一种新的原始数据类型Symbol, 表示独一无二的值。它是JavaScript语言的第七种数据类型( Number 、 String 、 Boolean 、 Objec t、 null 和 undefined ),是一种类似于字符串的数据类型。

Symbol特点

  1. Symbol 的值是唯一的,用来解决命名冲突的问题

  2. Symbol值不能与其他数据进行运算

  3. Symbol 定义的对象属性不能使用for..in 循环遍历,但是可以使用Reflect.ownKeys来获取对象的所有键名

创建Symbol

 //创建Symbol
let s = Symbol();
console.log(s,typeof s);  //Symbol() "symbol"

let s2 = Symbol('贺文靖'); //Symbol 是一个函数
let s3 = Symbol('贺文靖');
console.log(s2 === s3);//false

let s4 = Symbol.for('美女');  //此时,Symbol成为一个对象
let s5 = Symbol.for('美女');
console.log(s4 === s5);//true

对象添加Symbol类型的属性

//向对象添加方法 up down
let game = {};
//声明一个对象
let methods = {
    up: Symbol(),
    down: Symbol()
};

game[methods.up] = function () {
    console.log("我可以上升");
};

game[methods.down] = function () {
    console.log("我可以下降");
};
//调用方法
game[methods.up]();

这里调用我只知道用另一种方式:先在对象youxi外定义变量let say = Symbol('say')

再把对象youxi内部中括号的Symbol('say')替换成刚刚在外面定义的变量say,即[say]: function..

最后在对象youxi外部调用:youxisay这样就可以调用"我可以发言"那个方法了

let say = Symbol('say');
let zibao = Symbol('zibao');
/* let youxi = {
        name: '狼人杀',
        [Symbol('say')]: function () {
            console.log('我可以发言');
        },
        [Symbol('zibao')]: function () {
            console.log('我可以自爆');
        }
    };*/
let youxi = {
    name: '狼人杀',
    [say]: function () {
        console.log('我可以发言');
    },
    [zibao]: function () {
        console.log('我可以自爆');
    }
};
youxi[say]();

推荐阅读