• Symbol基础


    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]();
    
  • 相关阅读:
    fishredux 大体流程
    flutter Container组件和Text组件
    vue 页面跳转以及传参
    mySql 查询当天、本周、最近7天、本月、最近30天的语句
    Flutter编译时下载依赖报错的解决方案
    计算属性和方法
    计算属性传参
    原生js发送请求
    MySQL数据库连接
    flask 蓝图
  • 原文地址:https://www.cnblogs.com/wahaha-/p/14028030.html
Copyright © 2020-2023  润新知