设置Object默认值
2019-10-10 本文已影响0人
感觉不错哦
本篇比较短,记录自己刚学到的设置对象默认值
众所周知对象是通过valueOf跟toString来转换值的
var obj={
valueOf:()=>{console.log('ValueOf');return {}},
toString:()=>{console.log('String');return {}}
}
首先我们写一个对象并添加valueOf跟toString属性,先进行number转换
+obj
可以看到先进行了valueOf 然后是toString,最后报错(因为return 被我修改了)
那么再进行String转换
String(obj)
那么就先进行toString,当然如果return一个随意字符串就会终止这个过程
如果是对象自身隐式转换,则是valurOf优先
var obj={
valueOf:()=>{console.log('ValueOf');return {}},
toString:()=>{console.log('String');return 'a'}
}
console.log(obj=='1',obj==1,'1'==obj,1==obj)
为了防止报错,给予了一个字符串a
那么ES6之后规定了一个ToPrimitive函数,用来规定这个转换规则,也可以看到报错中出现了这个单词
使用方法很简单
var obj={
[Symbol.toPrimitive](n){
}
}
n的话是当前的环境所指(Stirng or Number)
var obj={
[Symbol.toPrimitive](n){
console.log(n)
if(n=='string'){
return 'vue'
}
if(n=='number'){
return 110
}
return true;
}
}
此时进行一个number操作
console.log(+obj)
同样的字符串操作(使用模板字符串)
console.log(`${obj}`)
默认执行
console.log(obj+'') //此时就是default状态