- 时间:2021-08-07 15:12 编辑: 来源: 阅读:
- 扫一扫,手机访问
摘要:javascript中强制执行toString()具体实现
原文:[url=http://www.2ality.com/2013/04/enforcing-tostring.html]Enforcing toString()
[/url]译文:[url=http://justjavac.com/javascript/2013/04/24/javascript-enforcing-the-function-tostring.html]javascript 中强制执行 toString()[/url]
译者:[url=http://weibo.com/singleseeker]singleseeker[/url]
Javascript通常会根据方法或运算符的需要而自动把值转成所需的类型,这可能导致各种错误。 Brian McKenna ([url=https://twitter.com/puffnfresh]@puffnfresh[/url]) [url=https://twitter.com/puffnfresh/status/316630924198572032]suggests[/url] 提供了下列测试代码:
[url=http://justjavac.com/javascript/2013/04/22/javascript-coercing-objects-to-primitives.html]两步完成[/url]:
1.调用 valueOf() 方法,如果返回一个基本类型,那么就结束
2.不然,调用方法 toString()。如果返回一个基本类型,那么结束
3.再不然,抛出错误
如果最后的转换是个数值,会是上述调用 valueOf() 与 toString 的这个顺序。
如果最后的转换是字符串,那么 toString 会被先调用。 加号运算符可能会被值转成数值型或是字符串型,但它[url=http://justjavac.com/javascript/2012/12/20/object-plus-object.html]通常根据数字运算产生一个基本类型[/url]。
不用在文章开始发的代码片段, Object.prototype.valueOf() 会返回这个对象本身,这个是从原生对象继续来的没有被重写的方法:
[url=http://weibo.com/singleseeker]@singleseeker[/url]罗嗦:这篇文章翻译起来真心是想更种吐槽,知识点总结的倒是不错, 不过做为一个不是英语为母语的老外写的英文技术文章交给我一个母语不是英语的菜鸟翻译,着实够折磨人。 下面进行简单的总结。
1.通常 valuOf() 指示返回一个未转换的对象,也就是其本身
2.加号运算符除了 Date 对象外,几乎全是先调用 valueof() 方法
3.如果使得 valueof() 返回一个明确的基本数值类型,那么当一个对象与字符串相加时,toString() 将不会被调用
参考
1.[url=http://justjavac.com/javascript/2013/04/22/javascript-coercing-objects-to-primitives.html]强制转换对象(objects)为原始值(primitives)[/url]
2.[url=http://justjavac.com/javascript/2012/12/20/object-plus-object.html]JavaScript中,{}+{}等于多少?[/url]
微信版

扫一扫进微信版
返回顶部