JavaScript中valueOf函数与toString方法重写优先级问题
来源:互联网 发布:mac上大型游戏 编辑:程序博客网 时间:2024/05/22 06:32
- 1.JavaScript中valueOf函数方法是返回指定对象的原始值。
使用方法:
object.valueOf( )object是必选项参数是任意固有 JScript 对象。
每个JavaScript固有对象的 valueOf 方法定义不同。
Math 和 Error 对象没有 valueOf 方法。
基本上,所有JS数据类型都拥有valueOf和toString这两个方法,null除外。它们俩解决javascript值运算与显示的问题。
以上信息转载自脚本之家
2.JavaScript 的 toString() 方法
toString() 方法可把一个逻辑值转换为字符串,并返回结果。3.重写valueOf函数与toString方法
下面是在转载的基础加上一些自己的体会
var aaa = { i: 10, valueOf: function () { console.log('valueOf'); return this.i + 30; }, toString: function () { console.log('toString'); return this.valueOf() + 10; } }; //给对象aaa定义valueOf()方法toString()方法 //alert(aaa > 20); // true valueOf //alert(+aaa); // 40 valueOf //alert(aaa); // 50 toString valueOf //alert(aaa === '50'); // false //alert('' + aaa); // 50 valueOf ===========?这个地方目前还不明白,按理说应该是字符串 //================同样被重写,在有操作符的情况下 优先调用valueOf。强等于,不进行隐式的运算,类型不相同就直接false var aa = { i: 10, toString: function () { console.log('toString'); return this.i; } }; //alert(aa);// 10 toString //alert(+aa); // 10 toString //alert('' + aa); // 10 toString //alert(String(aa)); // 10 toString //alert(Number(aa)); // 10 toString //alert(aa == '10'); // true toString //==============valueOf没有被重写,走的是被重写的toString。重写能提高优先级 //Object.prototype.valueOf = null; //Object.prototype.toString = null; var bb = { i: 10, valueOf: function () { console.log('valueOf'); return this.i; } } //alert(bb);// [object Object] //通过赋空Object.prototype.toString方法说明刚才走的是Object.prototype.toString //当只有重写valueOf时,没有运算符的情况下 //Object.prototype.toString的优先级最高其次是Object.prototype.valueOf,重写的toString,最后才是重写的valueOf //console.info(bb);// Object { i=10, valueOf=function()} //很明显,不管是哪个方法,最后输出的是一个对象,没有执行console.log('valueOf');。 //可能是console不进行隐式运算。 //alert(+bb); // 10 valueOf //有运算符时还是重写的valueOf优先级最高 //alert('' + bb); // 10 valueOf //alert(String(bb)); // [object Object] //只有重写valueOf时,String()转换,优先级又有了变化 //先走的是Object.prototype.toString、重写的valueOf、Object.prototype.valueOf //alert(Number(bb)); // 10 valueOf //alert(bb == '10'); // true valueOf
综上所述:
重写能提高优先级,在有运算符的情况下,
重写的valueOf
要比重写的toString
优先级高。强运算不进行隐式转换。
但是, 当只有
重写valueOf
的时候 优先级有很大的变化:
1.没有运算符的情况下
优先级从最高到最低依次是:
Object.prototype.toString
、Object.prototype.valueOf
、最后才是重写的valueOf
2.有运算符时还是重写的
valueOf
优先级最高3.String()时
见上例alert(String(bb));
,
优先级依次是Object.prototype.toString
、重写的valueOf
、Object.prototype.valueOf
以上部分信息参考司徒正美的博客-valueOf与toString方法研究
有关
date.toString()
,date.valueOf()
的问题
可以参考 valueOf与toString方法研究2
[] == ![] //答案为true,注意非[] !== []
[] ==> [].valueOf() ==> '';
![] ==> false
'' == false ==> true!!
- JavaScript中valueOf函数与toString方法重写优先级问题
- JavaScript中valueOf函数与toString方法深入理解
- JavaScript中的valueOf与toString方法
- Javascript中valueOf与toString区别
- Javascript中valueOf与toString区别浅析
- Javascript中valueOf与toString区别
- Javascript中valueOf与toString区别
- 简单说 JavaScript中的tostring( ) 与 valueOf( )方法
- JavaScript对象和方法算术运算或输出之valueOf和toString优先级
- JavaScript对象和方法算术运算或输出之valueOf和toString优先级
- toString函数与valueOf函数详解
- Javascript中valueOf()和toString()的区别
- JavaScript中valueOf 、toString 、toLocalString的区别
- js中toString、toLocaleString、valueOf函数区别
- javascript如何重写toString方法
- js中函数对象的方法,原型方法apply、call、bind、toString、toLocaleString、valueOf
- Android中重写toString()方法解决列表显示问题(为什么要重写toString?)
- toString与String.valueOf()
- 管理网站DEMO
- hdu 1114 Piggy-Bank
- 实用篇--查看linux系统版本是32位的还是64位的
- 安卓基本控件使用:EditText的光标的使用(模拟拨号界面的输入)
- JSON数据解析(二)——GSON
- JavaScript中valueOf函数与toString方法重写优先级问题
- 超融合架构与容器超融合
- request.getParameterValues 与 request.getParameter 的区别
- Zookeeper的功能以及工作原理
- 集合的并
- codeforces 703D 树状数组 + 离线处理 + 离散化
- javascript面试题(9)
- 浙大PAT甲级 1030
- 自己写的一个扑克牌比较点数的小游戏