这给出了“[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”,因为我正在通过警报功能放置对象(这基本上最终会调用值 - )?
答案 0 :(得分:2)
覆盖toString()
以获得您需要的结果:
var a={};
a.toString=function(){
return "asd";
};
alert(a);
答案 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()来检查这个。
<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)
通过执行“”+你试图提醒一个字符串和+你试图在字符串中转换任何值然后添加到空字符串“”