原始数据类型 Symbol,表示独一无二的值,第七种数据类型
Symbol 特点
- Symbol 的值是唯一的,用来解决命名冲突的问题
- Symbol 值不能与其他数据进行运算
- Symbol 定义的对象属性不能用 for…in 循环遍历,但可以使用 Reflect.ownKeys 来获取对象的所有键名
创建 Symbol(两种方式)
- Symbol()方式
let s = Symbol();
console.log(s, typeof s);
let s1 = Symbol("我是描述字符串");
let s2 = Symbol("我是描述字符串");
console.log(s1 == s2); //false
- 使用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