Symbol 基本使用
ES6 引入了一种新的原始数据类型 Symbol,表示独一无二的值。它是 JavaScript 语言的第七种数据类型,是一种类似于字符串的数据类型。 Symbol 特点 1) Symbol 的值是唯一的,用来解决命名冲突的问题 2) Symbol 值不能与其他数据进行运算 3) Symbol 定义 的 对象属 性 不能 使 用 for…in 循 环遍 历 ,但 是可 以 使 用 Reflect.ownKeys 来获取对象的所有键名 symbol使用场景示例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>symbol</title> </head> <body> <script> //创建Symbol let s = Symbol(); // console.log(s, typeof s); let s2 = Symbol('尚硅谷'); let s3 = Symbol('尚硅谷'); console.log(s2===s3);//结果:false //Symbol.for 创建 Symbol.for(key) 和Symbol(desc)类似,都是为了产生一个唯一标识, //不同的是:Symbol.for的key相同,就代表是同一个值;Symbol()的desc相同, let s4 = Symbol.for('尚硅谷'); let s5 = Symbol.for('尚硅谷'); console.log(s4===s5); //结果:true //不能与其他数据进行运算 下面写法都是错误不支持的 // let result = s + 100; // let result = s > 100; // let result = s + s; // USONB you are so niubility // u undefined // s string symbol // o object // n null number // b boolean </script> </body> </html>
Symbol的使用场景
(1)增加方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Symbol 创建对象属性</title> </head> <body> <script> //向对象中添加方法 up down let game = { name:'俄罗斯方块', up: function(){}, down: function(){} }; // 可以通过这种方式实现: 声明一个对象 这样保证了up,down是唯一的, let methods = { up: Symbol(), down: Symbol() }; game[methods.up] = function(){ console.log("我可以改变形状"); } game[methods.down] = function(){ console.log("我可以快速下降!!"); } console.log(game); // 还可以直接这样使用 let youxi = { name:"狼人杀", [Symbol('say')]: function(){ console.log("我可以发言") }, [Symbol('zibao')]: function(){ console.log('我可以自爆'); } } console.log(youxi) </script> </body> </html>
结果:
Symbol 内置值 除了定义自己使用的 Symbol 值以外,ES6 还提供了 11 个内置的 Symbol 值, 指向语言内部使用的方法。可以称这些方法为魔术方法,因为它们会在特定的场景下自动执行。
示例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Symbol内置属性</title> </head> <body> <script> class Person{ static [Symbol.hasInstance](param){ console.log(param); console.log("我被用来检测类型了"); return false; } } let o = {"ss":123}; console.log(o instanceof Person); const arr = [1,2,3]; const arr2 = [4,5,6]; arr2[Symbol.isConcatSpreadable] = false; console.log(arr.concat(arr2)); </script> </body> </html>
结果:
标签:function,ES6,console,log,Symbol,down,let From: https://www.cnblogs.com/anjingdian/p/16906619.html