valueOf不工作时,我做警报(obj)
valueOf not working when i do alert(obj)?
这给出了"[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>
通过做"+你试图警告一个字符串和+你试图在字符串中转换任何值,然后添加到空字符串"
相关文章:
- Javascript:selenium Web驱动程序isDisplayed()不工作
- jQuery UI自动完成突然停止工作
- AngularJS UI路由器不能像ng路由器那样工作
- HTML5音频加载和播放获胜'我不能在iPad上工作
- JavaScript打印功能使日历停止工作
- Javascript.getHours()工作不正常
- 为什么这在IE中的工作方式与在Firefox中不同
- 视频HTML没有'无法在Internet Explorer 11上工作
- 扩展移相器按钮类不工作
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- 谷歌地图不是以HTML显示,而是在JS Fiddle上工作
- 正在尝试使用if和else添加类,但无法正常工作
- Jquery FadeIn FadeOut 只工作一次
- 这条线是如何工作的:obj['e'+type+fn] = fn
- 什么工作得更快“for(在obj中键入)”或“.forEach”
- Object.keys(obj)的工作方式
- OBJ MTL加载器与环境光不工作
- 在jQuery不工作的情况下调用同一个obj中的方法
- valueOf不工作时,我做警报(obj)
- 为什么 obj={x,y} 在 Chrome 中工作