设置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状态
上一篇 下一篇

猜你喜欢

热点阅读