JavaScript struct类型与valueOf

来源:互联网 发布:网游加速器 for mac 编辑:程序博客网 时间:2024/05/29 13:01

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

0 0