let way =[{
type:'weixin',
count:0.9},{
type:'zhifubao',
count:0.85},{
type:'xianjin',
count:0.95}]letfun=(shop,obj)=>{let f1 =1;let price =0;switch(shop.type){case shop.type:
f1 = shop.count;
price = f1*obj.price*obj.num;break;}return price;}var allprice =fun(way[2],{price:120,num:5});
console.log(allprice);//570
六、Symbol.for(),Symbol.keyFor()
1.Symbol.for()
Symbol.for() 类似单例模式,首先会在全局搜索被登记的 Symbol 中是否有该字符串参数作为名称的 Symbol 值,如果有即返回该 Symbol 值,若没有则新建并返回一个以该字符串参数为名称的 Symbol 值,并登记在全局环境中供搜索。
如果想重新使用同一个 Symbol 值,Symbol.for()方法可以做到这一点。它接受一个字符串作为参数,然后搜索有没有以该参数作为名称的 Symbol 值。如果有,就返回这个 Symbol 值,否则就新建一个以该字符串为名称的 Symbol 值,并将其注册到全局。
创建两个Symbol()变量,两个变量是不恒等的。
let k1 =Symbol('ab');let k2 =Symbol('ab');
console.log(k1 === k2);//false
想要使用同一个Symbol值,即k1 === k2返回true。
使用Symbol.for()方法,返回同一个Symbol值
let s3 = Symbol.for('abc');let s4 = Symbol.for('abc');
console.log(s3 === s4);//true
Symbol.for()与Symbol()这两种写法,都会生成新的 Symbol。它们的区别是,前者会被登记在全局环境中供搜索,后者不会。Symbol.for()不会每次调用就返回一个新的 Symbol 类型的值,而是会先检查给定的key是否已经存在,如果不存在才会新建一个值。比如,如果你调用Symbol.for(“cat”)30 次,每次都会返回同一个 Symbol 值,但是调用Symbol(“cat”)30 次,会返回 30 个不同的 Symbol 值。
2.Symbol.keyFor()
Symbol.keyFor()方法返回一个已登记的 Symbol 类型值的key。
Symbol.keyFor() 返回一个已登记的 Symbol 类型值的 key ,用来检测该字符串参数作为名称的 Symbol 值是否已被登记。