是否可以在Javascript中为基元编写自定义valueOf方法?

时间:2015-05-22 06:40:44

标签: javascript

GtkWarning: gtk_text_buffer_emit_insert: assertion `g_utf8_validate (text, len, NULL)' failed

有没有办法为基元编写自定义Number.prototype.valueOf=function(){ alert('works!'); } 'str'+123; // no alert 'str'+(new Number(123)); // alert 方法?即有没有办法让valueOf()来电'str'+123

1 个答案:

答案 0 :(得分:3)

  

即。有没有办法让'str'+123来电alert()

不,你必须先做一些事情来将原语提升到它的等价对象,这条线不能做(我认为你不想这样做)。 addition operator (他们称之为连接)将使用规范ToString abstract operation将数字转换为字符串。对于数字,ToString抽象操作does the steps below,不涉及使用NumberObject原型中的任何内容。

The ToString abstract operation applied to numbers

  1. 如果 m NaN ,请返回字符串"NaN"
  2. 如果 m +0 -0 ,请返回字符串"0"
  3. 如果 m 小于零,则返回字符串"-"和ToString( - m )的字符串并置。
  4. 如果 m 为无穷大,则返回字符串"Infinity"
  5. 否则,让 n k s 为整数,使 k ≥1,10< SUP> ķ -1     ≤ s &lt; 10 k s ×10 n-k 的数值是      m k 尽可能小。请注意, k 是十进制中的位数      s 的表示, s 不能被10整除, s 的最低有效位是     不一定由这些标准唯一确定。
  6. 如果 k n ≤21,则返回由十进制表示的 k 位组成的字符串     s(按顺序,没有前导零),然后是 n-k 出现的字符     “0”。
  7. 如果0 < n≤21,返回由小数的最重要的 n 位组成的字符串     表示 s ,后跟小数点“.”,然后是剩余的      s 的十进制表示的 k-n 位。
  8. 如果-6&lt; n≤0,返回由字符“0”组成的字符串,后跟a     小数点'.',后跟 - n 出现的字符     '0',后跟 s 的十进制表示的 k 位。
  9. 否则,如果 k = 1,则返回由 s 的单个数字组成的字符串,后跟小写     字符“e”,后跟加号“+”或减号     ''根据 n -1是正还是负,然后是     整数abs的十进制表示( n -1)(没有前导零)。
  10. 返回由 s 的十进制表示的最高有效位组成的字符串,后跟a     小数点'。',后跟剩余的 k -1位数的十进制表示      s ,后跟小写字母“e”,后跟加号     根据 n -1是否为“+”或减号“”     正数或负数,后跟整数abs的十进制表示( n -1)(没有前导零)。