ES2015+学习笔记系列(二)——Symbol

原始数据类型 Symbol,表示独一无二的值,第七种数据类型

Symbol 特点

  • Symbol 的值是唯一的,用来解决命名冲突的问题
  • Symbol 值不能与其他数据进行运算
  • Symbol 定义的对象属性不能用 for…in 循环遍历,但可以使用 Reflect.ownKeys 来获取对象的所有键名

创建 Symbol(两种方式)

  1. Symbol()方式
let s = Symbol();
console.log(s, typeof s);
let s1 = Symbol("我是描述字符串");
let s2 = Symbol("我是描述字符串");
console.log(s1 == s2); //false
  1. 使用Symbol.for创建
let s3 = Symbol.for("尚硅谷");
let s4 = Symbol.for("尚硅谷");
let s5 = Symbol.for("我是描述字符串");
console.log(s3, typeof s3);
console.log(s3 == s4);//true
console.log(s3 === s4);//true
console.log(s3 == s5);//false

Symbol 创建对象属性

  let game = {
            up: function () {
                console.log("upup");
            },
            down: function () {
                console.log(down);
            },
            [Symbol("left")]: function () {//此种方法如何调用?
                console.log("left1");
            },
            [Symbol.for('left')]: function () {//此种方法可以调用
                console.log("left2");
            },
        };
        // console.log(game[Symbol("left")]);
------------------------------------------------------------------
        let methods = {
            up: Symbol("up"),
            down: Symbol("down"),
            left: Symbol("left"),
        };
        game[methods.up] = function () {
            console.log("up2");
        };
        game[methods.down] = function () {
            console.log(down2);
        };
        game[methods.left] = function () {
            console.log("left3");
        };
        console.log(game);
        // console.log(game[Symbol('left')]());
        console.log(game[Symbol.for('left')]());

Symbol 内置值

11 个内置的 Symbol 值,指向语言内部使用的方法,控制对象在特定场景下的表现

  • Symbol.hasInstance
class Persong {
  static [Symbol.hasInstance](param) {
    console.log(param);
    console.log("用来检测类型");
    // return true;
    return false;
  }
}
let o = {};
console.log(o instanceof Persong);
  • Symbol.isConcatSpreadable
let symArr1 = ["1", "2"];
let symArr2 = ["3", "4", "5"];
symArr2[Symbol.isConcatSpreadable] = false;
console.log(symArr1.concat(symArr2));//["1", "2", Array(3)]

七种数据类型

USONB–you are so niubility
u undefined

s——string symbol

o——object

n——null number

b——boolean

相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页