日期: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的特点
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
的“张三”的值不一样,由此可以用来解决命名冲突的问题;
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
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 值 | 描述 |
---|---|---|---|
1 | Number | "number" | 数值 |
2 | String | string | 字符串 |
3 | Boolean | "boolean" | 布尔类型,true 或 false |
4 | Object | "object" | 对象(typeof :对象、数组或 null 返回 object ) |
5 | null | "object" | null 是 “nothing”,看做不存在的事物 |
6 | undefined | "undefined" | 未定义,空值与undefined不是一回事 |
7 | Symbol | "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