在JS的值的对比中,我们经常会用到valueOf,然于这个方法到底有什么奇特之处呢。下面就来一段valueOf用处示例:
function Card(value) {
this.value = value;
this.isValid = value>=0 && value < 54;
}
再普通不过的一段代码,用来表示一个值是否在0~54之间(不包含54)。但是如果用来跟其它比较大小的话,问题来了,如:
var a = new Card(11);
if(a == 11)
{
console.log("猜对了");
}
查看上面的代码,你会发现这值没法比,只能使用:
var a = new Card(11);
if(a.value == 11)
{
console.log("猜对了");
}
来进行判断了,如果换作其它语言,你肯定会想到使用 struct 或者 operator,可是在JS中该怎么使用它呢?
其实相比其它语言JS更简单,你只需要使用valueOf就可以实现了。
于是我们加上代码:
Card.prototype = {
valueOf:function () {
return this.value;
}
}
再继续执行上面的示例:
var a = new Card(11);
if(a == 11)
{
console.log("猜对了");
}
var a = new Card(11);
if(a.value == 11)
{
console.log("猜对了");
}
有没有发现,两个都正常输出了啊。哈哈,是不是跟 struct 一样呢?
其实,在JS中valueOf只得到值的类型,当两个值进行比较时,会先通过valueOf获取当前值然后再进行对比。