javascript中强制执行toString()具体实现

 更新时间:2013年04月27日 14:43:35   作者:  
Javascript通常会根据方法或运算符的需要而自动把值转成所需的类型,这可能导致各种错误,接下来为大家介绍下javascript如何强制执行toString(),感兴趣的朋友可以参考下哈
原文:Enforcing toString()
译文:javascript 中强制执行 toString()
译者:singleseeker
Javascript通常会根据方法或运算符的需要而自动把值转成所需的类型,这可能导致各种错误。 Brian McKenna (@puffnfresh) suggests 提供了下列测试代码:
复制代码 代码如下:

Object.prototype.valueOf = function () {
throw new Error('Use an explicit toString');
};
[\s\S ]*\n
这些代码会产生什么效果? 你现在再也不能用加号运算符去把一个对像转成一个字符串了:
[code]
> var obj = {};
> 'Hello '+obj

Error: Use an explicit toString
复制代码 代码如下:

> String(obj)
'[object Object]'
> obj.toString()
'[object Object]'
> 'Hello '+String(obj)

'Hello [object Object]'这个又是怎么回事呢? 要把一个对象转成一个特定的基本类型 T,首先是它的值被转化成基本类型,然后才是转换成 T,前一个转换由两步完成
1.调用 valueOf() 方法,如果返回一个基本类型,那么就结束
2.不然,调用方法 toString()。如果返回一个基本类型,那么结束
3.再不然,抛出错误
如果最后的转换是个数值,会是上述调用 valueOf() 与 toString 的这个顺序。
如果最后的转换是字符串,那么 toString 会被先调用。 加号运算符可能会被值转成数值型或是字符串型,但它通常根据数字运算产生一个基本类型
不用在文章开始发的代码片段, Object.prototype.valueOf() 会返回这个对象本身,这个是从原生对象继续来的没有被重写的方法:
复制代码 代码如下:

> var obj = {};
> obj.valueOf() === obj

true加号运算符最终会调用 toString()。 上面的代码片段阻止了调用,在能调用那个方法前抛出了错误。
注意这个错误信息并不总是完全正确。
复制代码 代码如下:

> Number(obj)

Error: Use an explicit toString但是这一招扔然是有用的。
如果一个对象真想被转化成数字,那么它无论如何还是要调用自己的 valueOf 方法。
@singleseeker罗嗦:这篇文章翻译起来真心是想更种吐槽,知识点总结的倒是不错, 不过做为一个不是英语为母语的老外写的英文技术文章交给我一个母语不是英语的菜鸟翻译,着实够折磨人。 下面进行简单的总结。
1.通常 valuOf() 指示返回一个未转换的对象,也就是其本身
2.加号运算符除了 Date 对象外,几乎全是先调用 valueof() 方法
3.如果使得 valueof() 返回一个明确的基本数值类型,那么当一个对象与字符串相加时,toString() 将不会被调用
参考
1.强制转换对象(objects)为原始值(primitives)
2.JavaScript中,{}+{}等于多少?

相关文章

  • JS实现炫酷轮播图

    JS实现炫酷轮播图

    这篇文章主要为大家详细介绍了JS实现炫酷轮播图,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • javascript中负数算术右移、逻辑右移的奥秘探索

    javascript中负数算术右移、逻辑右移的奥秘探索

    javascript中负数的算术右移和逻辑右移都十分的让人迷惑,特别是逻辑右移,接下来的文章中将为大家详细介绍下为什么右移之后,一个很小的负数也会得到一个无比巨大的数
    2013-10-10
  • 微信小程序获取手机网络状态的方法【附源码下载】

    微信小程序获取手机网络状态的方法【附源码下载】

    这篇文章主要介绍了微信小程序获取手机网络状态的方法,涉及微信小程序wx.getNetworkType函数检查网络连接状态的相关使用技巧,并附带源码供读者下载参考,需要的朋友可以参考下
    2017-12-12
  • javascript正则表达式中参数g(全局)的作用

    javascript正则表达式中参数g(全局)的作用

    表达式加上参数g之后,表明可以进行全局匹配,注意这里可以的含义。
    2010-11-11
  • 使用 bootstrap modal遇到的问题小结

    使用 bootstrap modal遇到的问题小结

    bootstrap提供了一个写好的css文件和js文件然而在使用时遇到了一下并不是很好的问题,今天在使用弹出对话框时遇到了一个这样的问题,今天小编给大家分享下使用 bootstrap modal遇到的问题小结,一起看看吧
    2016-11-11
  • bootstrap table实现点击翻页功能 可记录上下页选中的行

    bootstrap table实现点击翻页功能 可记录上下页选中的行

    这篇文章主要介绍了bootstrap table实现点击翻页功能,可记录上下页选中的行,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09
  • 使用JavaScript将PDF页面中的标注扁平化的操作指南

    使用JavaScript将PDF页面中的标注扁平化的操作指南

    扁平化(flatten)操作可以将标注作为矢量图形包含在PDF页面的内容中,使其不可编辑,Dynamsoft Document Viewer是一个用于文档扫描和查看的JavaScript SDK,可以添加标注、导出PDF,在本文中,我们将探讨如何使用它,需要的朋友可以参考下
    2025-01-01
  • JS实现静态页面搜索并高亮显示功能完整示例

    JS实现静态页面搜索并高亮显示功能完整示例

    这篇文章主要介绍了JS实现静态页面搜索并高亮显示功能,涉及javascript事件响应、字符遍历替换及页面元素属性动态变换等相关操作技巧,需要的朋友可以参考下
    2017-09-09
  • javascript网页随机点名实现过程解析

    javascript网页随机点名实现过程解析

    这篇文章主要介绍了javascript实现网页随机变色及实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • JavaScript中的创建枚举四种方式

    JavaScript中的创建枚举四种方式

    枚举是一种数据结构,它定义了一个有限的具名常量集,每个常量都可以通过其名称来访问,这篇文章主要介绍了JavaScript中的四种枚举方式,需要的朋友可以参考下
    2023-05-05

最新评论