valueOf是否总是在javascript中覆盖toString? [英] Does valueOf always override toString in javascript?

查看:99
本文介绍了valueOf是否总是在javascript中覆盖toString?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是否有任何表达式,对象的toString方法被隐式调用覆盖其valueOf方法?

Is there any expression where by an object's toString method is implicitly called overriding its valueOf method?

在下面的示例中,valueOf总是被隐式调用(覆盖toString)。

In the examples below, valueOf is always called implicitly (overriding toString).

"4" + {
    toString: function () {
        return "4";
    },
    valueOf: function () {
        return 6;
    }
};    // => "46", was expecting "44"

4 + {
    toString: function () {
        return "6";
    },
    valueOf: function () {
        return 4;
    }
};    // => 8

4 + {
    toString: function () {
        return 6;
    },
    valueOf: function() {
        return "4";
    }
};    // => "44"

即:

可以我们编写一个表达式,其中toString被隐式调用valueOf(即没有显式调用toString)?

Can we write an expression where by toString is implicitly called over valueOf (i.e without explicitly calling toString)?

推荐答案

日期的+运算符对象使用toString而不是valueOf。此外,如果valueOf返回非原始值,则接下来调用toString方法。 (JavaScript - 权威指南,第3.14节)使用您的示例:

The + operator on Date objects uses toString not valueOf. Also if valueOf returns a non-primitive value then the toString method is called next. (JavaScript - The definitive guide, section 3.14) Using your example:

var result = "4" + {
    toString: function () {
        return "4";
    },
    valueOf: function () {
        return this; // returning an object, not a primitive
    }
};

结果现在是44。

这篇关于valueOf是否总是在javascript中覆盖toString?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆