JavaScript struct类型与valueOf

在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获取当前值然后再进行对比。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值