【JS011】ES6的学习笔记之原始数据类型Symbol

日期:2021年8月23日
作者:Commas
注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方,还望各位大佬不吝赐教,谢谢^ - ^
(ง •_•)ง 积跬步以致千里,ES6的学习笔记
1.01365 = 37.7834;0.99365 = 0.0255
1.02365 = 1377.4083;0.98365 = 0.0006



一、Symbol的介绍与创建

说明:Symbol是ES6引入的一种新的原始数据类型,主要是用来表示独一无二的值。它是JavaScript语言的第七种数据类型,有点类似于字符串的数据类型。
PS:Symbol函数栈不能用new命令,因为Symbol原始数据类型,不是对象

  • 语法一let symbolValue = Symbol(variable)
//(1)创建没有【标识】的Symbol
let s1 = Symbol();
console.log(s1);
//控制台输出:Symbol()

//(2)创建有【标识】的Symbol,标识为“张三”
let s2 = Symbol("张三");
console.log(s2);
//控制台输出:Symbol(张三)
  • 语法二let symbolValue = Symbol.for(variable)
//(1)创建没有【标识】的Symbol
let s1 = Symbol.for();
console.log(s1);
//控制台输出:Symbol(undefined)

let s3 = Symbol.for("");
console.log(s3);
//控制台输出:Symbol(undefined)

//(2)创建有【标识】的Symbol,标识为“张三”
let s2 = Symbol.for("张三");
console.log(s2);
//控制台输出:Symbol(张三)

二、Symbol的特点

  1. Symbol的值是唯一的,可以用来解决命名冲突的问题;
//(1)创建没有【标识】的Symbol
//(1-1)创建Symbol
let s1 = Symbol();
console.log(s1);
//控制台输出:Symbol()

//(1-2)相同Symbol
let s1_same = s1;
console.log(s1_same,s1===s1_same);
//控制台输出:Symbol() true

//(1-3)不同Symbol
let s1_other = Symbol();
console.log(s1_other,s1===s1_other);
//控制台输出:Symbol() false

//(2)创建有【标识】的Symbol,标识为“张三”
//(2-1)创建Symbol
let s2 = Symbol("张三");
console.log(s2);
//控制台输出:Symbol(张三)

//(2-2)相同Symbol
let s2_same = s2;
console.log(s2_same,s2===s2_same);
//控制台输出:Symbol(张三) true

//(2-3)不同Symbol
let s2_other = Symbol("张三");
console.log(s2_other,s2===s2_other);
//控制台输出:Symbol(张三) false

小结:Symbol("张三")!==Symbol("张三"),我们不深入讨论,仅仅从表现来看,虽然等号前后都是“张三”,但是Symbol的“张三”的值不一样,由此可以用来解决命名冲突的问题;

  1. Symbol的值不能与其他数据进行运算;
//(1)创建没有【标识】的Symbol
let s1 = Symbol();
// console.log(s1+'199');
//控制台输出:
//Uncaught TypeError: Cannot convert a Symbol value to a string

//(2)创建有【标识】的Symbol,标识为“张三”
let s2 = Symbol("张三");
console.log(s2+'007');
//控制台输出:
//Uncaught TypeError: Cannot convert a Symbol value to a string
  1. Symbol定义的对象属性不能使用for...in...循环遍历,但是可以使用Reflect.ownkeys来获取对象的所有键名
const obj1 = {
    [Symbol("p1")]: "张三",
    p1: "p1",
    p2: 18,
    [Symbol("p2")]: function(s){
        console.log(s);
    },
    [Symbol("p2")]: function(s2){
        console.log(s2);
    }
};
console.log(Reflect.ownKeys(object1));
//控制台输出:
//(5) ["p1", "p2", Symbol(p1), Symbol(p2), Symbol(p2)]

可以借助另外一个对象来存储Symbol值,这样方便调用这个对象的属性方法,如下所示:

const oM={
    "name":Symbol("p1"),
    "s":Symbol("p2"),
    "s2":Symbol("p2"),
}

const obj1 = {
    [oM.name]: "张三",
    p1: "p1",
    p2: 18,
    [oM.s]: function(s){
        console.log(s);
    },
    [oM.s2]: function(s2){
        console.log(s2);
    }
};
console.log(Reflect.ownKeys(obj1));
//控制台输出:(4) ["p1", "p2", Symbol(p1), Symbol(p2)]
console.log(obj1[oM.name],obj1.p2);
//控制台输出:张三 18

三、浅谈7种原始数据类型

序号数据类型typeof描述
1Number"number"数值
2Stringstring字符串
3Boolean"boolean"布尔类型,truefalse
4Object"object"对象(typeof:对象、数组或 null 返回 object
5null"object"null是 “nothing”,看做不存在的事物
6undefined"undefined"未定义,空值与undefined不是一回事
7Symbol"symbol"独立无二的“字符串”
let a = 1
    ,b = "123"
    ,c = true
    ,d = new Object()
    ,e = []
    ,f = null
    ,g = undefined
    ,h = Symbol()
    ,i = function(a){}

    console.log(a,typeof(a));//1 "number"
    console.log(b,typeof(b));//123 string
    console.log(c,typeof(c));//true "boolean"
    console.log(d,typeof(d));//{} "object"
    console.log(e,typeof(e));//[] "object"
    console.log(f,typeof(f));//null "object"
    console.log(g,typeof(g));//undefined "undefined"
    console.log(h,typeof(h));//Symbol() "symbol"
    console.log(i,typeof(i));//ƒ (a){} "function"

版权声明:本文为博主原创文章,如需转载,请给出:
原文链接:https://blog.csdn.net/qq_35844043/article/details/119866942

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Commas.KM

码路共同进步,感恩一路有您

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值