const gender = { //这样就说明man就是一个独一无二的值,不用再man:'man' man: Symbol(), woman: Symbol(),} function isMan(gender) { switch (gender) { case gender.man: console.log('男性'); break; case gender.woman: console.log('女性'); break }} ...
const TYPE_IMAGE = "IMAGE"; function handleFileResource(resource) { switch (resource.type) { case TYPE_AUDIO: playAudio(resource); break; case TYPE_VIDEO: playVideo(resource); break; case TYPE_IMAGE: previewImage(resource); break; default: throw new Error("Unknown type of resource"); } }...
Symbol作为对象属性名时,不能使用点运算符,使用点运算符后,这个属性名就是一个普通字符串了,而不是Symbol类型。 Symbol属性名具有隐藏性,是不可枚举属性,所以这个属性不能使用for...in、for...of、Object.keys()、Object.getOwnPropertyNames()、JSON.stringify()等方法访问到 另一个新的 Reflect.ownKeys()方法可...
functionlib1(obj) { obj.id=123; }functionlib2(obj) { obj.id=456; }lib1(person);lib2(person);console.log(person.id);//456 那么id属性的值会被覆盖掉。于是可以用Symbol解决这种问题 functionlib1(obj) { obj[Symbol('id1')]=123; }functionlib2(obj) { obj[Symbol('id1')] =456; }li...
functioninstanceOf(L,R){varR_temp=R.prototype;// 获取右侧对象的原型对象L=L.__proto__;// 获取左侧对象的原型对象while(true){if(L==null){// 若左侧对象的原型对象是空,则返回falsereturnfalse;}if(L===R_temp){// 若二者的原型对象相等,则说明L是由R直接或间接创建的returntrue;}L=L.__prot...
...numbers)=>{constarray=[...numbers];// push 方法只接受数字array.push=function(item){if(...
在企业开发中如果需要对一些第三方的插件、框架进行自定义的时候可能会因为添加了同名的属性或者方法, 将框架中原有的属性或者方法覆盖掉,为了避免这种情况的发生, 框架的作者或者我们就可以使用Symbol作为属性或者方法的名称 letperson={name:"shanjialan",[name]:'sjl',[say]:function(){alert("say");}}person....
toString: function() { return 'abc'; } } console.log(Symbol(obj)); // abc let s = Symbol('mySymbol'); // console.log(s + '123'); // Uncaught TypeError: Cannot convert a Symbol value to a string console.log(String(s), s.toString()); // 'Symbol(mySymbol)' 'Symbol(mySymbol...
Symbol.keyFor = function (symbol) { for (const key in registry) { if (registry.hasOwnProperty(key) && registry[key] === symbol) { return key; } } }; export default Symbol; 我们使用一个全局对象registry来存储Symbol对象及其描述符信息。createSymbol()函数用于创建新的Symbol对象,其中使用了Objec...
myIterable[Symbol.iterator] = function* () { yield 1; yield 2; yield 3; }; for (const value of myIterable) { console.log(value); // 输出:1 2 3 } 3. 隐藏属性:使用 Symbol 作为属性名,可以隐藏属性,使其不容易被意外访问到。