javascript 中强制执行 toString()
2013-04-27 09:32
197 查看
原文:Enforcing toString()
译文:javascript
中强制执行 toString()
译者:singleseeker
Javascript通常会根据方法或运算符的需要而自动把值转成所需的类型,这可能导致各种错误。 Brian McKenna (@puffnfresh) suggests 提供了下列测试代码:
这些代码会产生什么效果? 你现在再也不能用加号运算符去把一个对像转成一个字符串了:
这个又是怎么回事呢? 要把一个对象转成一个特定的基本类型 T,首先是它的值被转化成基本类型,然后才是转换成 T,前一个转换由两步完成:
调用
不然,调用方法
再不然,抛出错误
如果最后的转换是个数值,会是上述调用
如果最后的转换是字符串,那么
不用在文章开始发的代码片段,
加号运算符最终会调用
注意这个错误信息并不总是完全正确。
但是这一招扔然是有用的。
如果一个对象真想被转化成数字,那么它无论如何还是要调用自己的
@singleseeker罗嗦:这篇文章翻译起来真心是想更种吐槽,知识点总结的倒是不错, 不过做为一个不是英语为母语的老外写的英文技术文章交给我一个母语不是英语的菜鸟翻译,着实够折磨人。
下面进行简单的总结。
通常
加号运算符除了
如果使得
强制转换对象(objects)为原始值(primitives)
JavaScript中,{}+{}等于多少?
译文:javascript
中强制执行 toString()
译者:singleseeker
Javascript通常会根据方法或运算符的需要而自动把值转成所需的类型,这可能导致各种错误。 Brian McKenna (@puffnfresh) suggests 提供了下列测试代码:
Object.prototype.valueOf = function () { throw new Error('Use an explicit toString'); };
这些代码会产生什么效果? 你现在再也不能用加号运算符去把一个对像转成一个字符串了:
> 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,前一个转换由两步完成:
调用
valueOf()方法,如果返回一个基本类型,那么就结束
不然,调用方法
toString()。如果返回一个基本类型,那么结束
再不然,抛出错误
如果最后的转换是个数值,会是上述调用
valueOf()与
toString()的这个顺序。
如果最后的转换是字符串,那么
toString会被先调用。 加号运算符可能会被值转成数值型或是字符串型,但它通常根据数字运算产生一个基本类型。
不用在文章开始发的代码片段,
Object.prototype.valueOf()会返回这个对象本身,这个是从原生对象继续来的没有被重写的方法:
> var obj = {}; > obj.valueOf() === obj true
加号运算符最终会调用
toString()。 上面的代码片段阻止了调用,在能调用那个方法前抛出了错误。
注意这个错误信息并不总是完全正确。
> Number(obj) Error: Use an explicit toString
但是这一招扔然是有用的。
如果一个对象真想被转化成数字,那么它无论如何还是要调用自己的
valueOf方法。
@singleseeker罗嗦:这篇文章翻译起来真心是想更种吐槽,知识点总结的倒是不错, 不过做为一个不是英语为母语的老外写的英文技术文章交给我一个母语不是英语的菜鸟翻译,着实够折磨人。
下面进行简单的总结。
通常
valuOf()指示返回一个未转换的对象,也就是其本身
加号运算符除了
Date对象外,几乎全是先调用
valueOf()方法
如果使得
valueOf()返回一个明确的基本数值类型,那么当一个对象与字符串相加时,
toString()将不会被调用
参考
强制转换对象(objects)为原始值(primitives)JavaScript中,{}+{}等于多少?
相关文章推荐
- javascript中强制执行toString()具体实现
- 对象调用javascript 中强制执行 toString()
- javascript 中强制执行 toString()
- javascript 的强制转换字符串,和toString方法的区别
- javascript学习总结:变量强制转换和执行效率
- javaScript 自执行函数—保留异步方法调用的内部变量
- 优化javascript的执行速度
- JavaScript代码执行
- javascript中的变量、执行环境、作用域
- JavaScript数据类型的强制转化-数值
- UpdatePanel PostBack返回后执行Javascript实例
- BX9029: IE 和 Firefox 可以通过特定方法使 innerHTML 方法载入的 SCRIPT 标签中的 JavaScript 代码在页面加载后也可以执行
- 域名实名认证将强制执行
- 加快JavaScript加载和执行效率
- 后台执行命令 nohup 以及强制结束进程命令 kill
- SS vector - 利用浏览器HTML注释解析问题执行javascript(一)
- javascript中巧用“闭包”实现程序的暂停执行功能
- 优化javaScript代码,提高执行效率
- JavaScript运行过程中的“预编译阶段”和“执行阶段”
- javascript中的toString()、toLocaleString()方法