深圳市华企网络科技有限公司,广州seo公司推荐,做网站学什么什么专业,泉州市住房和城乡建设网站前言
Symbol 基本数据类型 独一无二得值 Symbol函数创建 接收字符串 对symbol值得描述 let s1 Symbol(描述)
/*** symbol 基本数据类型 表示独一无二的值 Symbol函数创建独一无二得值 参数可以是唯一值得描述*/
let sy1 Symbol();//创建好一个独一无二得值
let sy2 Symbo… 前言
Symbol 基本数据类型 独一无二得值 Symbol函数创建 接收字符串 对symbol值得描述 let s1 Symbol(描述)
/*** symbol 基本数据类型 表示独一无二的值 Symbol函数创建独一无二得值 参数可以是唯一值得描述*/
let sy1 Symbol();//创建好一个独一无二得值
let sy2 Symbol();
console.log(sy1,sy2)
console.log(sy1 sy2);
console.log(typeof sy1,sy1 instanceof Object);let sy1 Symbol(symbol数据类型);//对独一无二值得描述
let sy2 Symbol({name:zhangsan})
let sy3 Symbol([1,2,3]);
let sy4 Symbol(null);
console.log(sy1,sy2,sy3,sy4);应用 1.解决命名冲突 无法直接访问 Object.getOwnProperSymbols(); 得到存放symbol属性名数组 let res Object.getOwnProperSymbols();//[Symbol(name),Symbol(age)] obj[res[0]]
/*** Symbol应用* 1.解决命名冲突 */
let sy1 Symbol(name);
let sy2 Symbol(age);
let obj {name:zhangsan,age:12,[sy1]:terry,[sy2]:18,[Symbol(email)]:xxxbriup.com
};
//为了访问Symbol创建属性
console.log(Object.getOwnPropertySymbols(obj));
var ss Object.getOwnPropertySymbols(obj);//[ Symbol(name), Symbol(age), Symbol(email) ]
console.log(obj[ss[0]],obj[ss[1]]);console.log(obj[Symbol(email)]);//无效 undefined
console.log(obj[sy1]);//可以访问属性
console.log(obj[sy2]);
// 遍历对象 使用symbol值创建属性无法遍历
for(let key in obj){console.log(key)
} 2.消除魔术字符串 代码对于字符串依赖关系强形成强耦合 形成魔术字符串
/** * 2.消除魔术字符串 代码对字符串依赖性非常强 形成强耦合关系 形成了魔术字符串*/
function Area(shape,options){let area 0;switch(shape){case triangle:area options.width * options.height * 0.5;break;case square:area options*width * options.height;break;case circle:area Math.PI * options.r * options.r;break;default:area -1;}return area;
}
let res Area(triangle,{width:100,height:100,r:50});
console.log(res);function Area(shape,options){let area 0;switch(shape){case Shape.SJX:area options.width * options.height * 0.5;break;case Shape.ZFX:area options.width * options.height;break;case Shape.CIRCLE:area Math.PI * options.r * options.r;break;default:area -1;}return area;
};
// 枚举 类型可以罗列出来 性别男 女
let Shape {SJX:Symbol(三角形),ZFX:Symbol(正方形),CIRCLE:Symbol(圆)
}let res Area(Shape.ZFX,{width:100,height:100,r:50});
console.log(res);3.全局注册表 可以使用Symbol.for全局注册一个Symbol值 Symbol.for(hello); Symbol.for(hello); Symbol.keyFor 检测Symbol有没有全局注册过 注册过返回Symbol值得描述或者undefined /*** 全局注册表 Symbol.for*/
// 可以创建一个symbol值的时候进行全局注册
let sy1 Symbol.for(name);
let sy2 Symbol.for(name);
console.log(sy1 sy2);let sy3 Symbol(age);
let sy4 Symbol(age);
console.log(sy3 sy4);// Symbol.keyFor 检测symbol值有没有在全局注册过 注册过返回symbol值得描述 没有返回undefined
console.log(Symbol.keyFor(sy1));
console.log(Symbol.keyFor(sy2));
console.log(Symbol.keyFor(sy3));
console.log(Symbol.keyFor(sy4));