当我做警报(obj)时,valueOf不工作?

时间:2011-08-08 05:46:21

标签: javascript html

这给出了“[object Object]”:

<!doctype html>
<script>
var a={};
a.valueOf=function(){
    return "asd";
};
alert(a);
</script>

但是这给出了“asd”:

<!doctype html>
<script>
var a={};
a.valueOf=function(){
    return "asd";
};
alert(""+a);
</script>

我能理解为什么我在第二个例子中得到“asd”。但是在第一个例子中,我并没有得到“asd”,因为我正在通过警报功能放置对象(这基本上最终会调用值 - )?

5 个答案:

答案 0 :(得分:2)

覆盖toString()以获得您需要的结果:

var a={};
a.toString=function(){
    return "asd";
};
alert(a);

看看这个valueOf() vs. toString() in Javascript

答案 1 :(得分:1)

当您使用+运算符时,JavaScript使用valueOf,否则当从对象中期望String时,JavaScript使用toString()。在内部,也许在Object.prototype.valueOf中,它被设计为与toString()相同。因此,如果只定义toString()而不定义valueOf(),则JavaScript将使用toString()作为'+'(因为内部valueOf调用toString)和在需要String的上下文中。但是,如果定义valueOf,那么将在有“+”(或 - 或/或任何其他算术运算符)的地方使用。但是当它需要一个String时(例如在警告的情况下)它将不会被使用。它将调用toString()。

答案 2 :(得分:0)

“a”是一个对象,以便在一个人显示对象时发出警报,通过做警告(“”+ a)你强迫“a”被视为字符串

答案 3 :(得分:0)

“”+ a返回字符串类型。使用typeof()来检查这个。

http://jsfiddle.net/zYs73/

<div id='t'></div>

 <script>
    var a={};
    a.valueOf=function(){
        return "asd";
    };
    alert(a);
    document.getElementById('t').innerHTML += "<br/>" + typeof(a);

    var b={};
    b.valueOf=function(){
        return "asd";
    };
    alert(""+b);
    document.getElementById('t').innerHTML += "<br/>" +  typeof(""+b);
</script>

答案 4 :(得分:0)

通过执行“”+你试图提醒一个字符串和+你试图在字符串中转换任何值然后添加到空字符串“”