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

valueOf not working when i do alert(obj)?

本文关键字:obj 工作 valueOf      更新时间:2023-09-26

这给出了"[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",因为我把对象通过警报函数(基本上最终调用的值)?

覆盖toString()以达到您需要的结果:

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

看一下Javascript中的valueOf()和toString()

当你使用+操作符时,JavaScript使用valueOf,否则当需要从对象中获取字符串时,JavaScript使用toString()。在内部,可能在Object.prototype中。valueOf,它被设计成与toString()相同。因此,如果您只定义toString(),而不定义valueOf(), JavaScript将使用toString() '+'(因为内部valueOf调用toString)和在需要String的上下文中。但是,如果您定义了valueOf,那么它将在有'+'(或-或/或任何其他算术运算符)的地方使用。但是当它需要一个String(如alert的情况)时,它不会被使用。它将调用toString()

"a"是一个对象所以在显示对象的情况下alert("+a)强制将"a"视为字符串

"+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>

通过做"+你试图警告一个字符串和+你试图在字符串中转换任何值,然后添加到空字符串"