【原创】parseInt大改造
首先我必须感谢那些即使这个问题我强调过无数次,也依然反复重复类似错误的人们。
没有他们反复犯错的鼓励,或许我不会认真考虑这个问题的解决方案。
其次,必须感谢《JavaScript高级程序设计》的作者和译者。
在这里我得到了解决该问题的启示,不然我依然要每每强调使用parseInt时应注意什么。
问题:
很久以前发生的问题不想再痛苦的回忆。
这次的问题很简单。两个月份比较的时候,因为月份是从字符串中抽取出来的,于是用parseInt转换了一下。
原因请参看以下《JavaScript高级程序设计》19~20页对 parseInt函数的讲解。
当然,对二进制、八进制甚至十进制(默认模式),都可以这样调用 parseInt() 方法:
var iNum2 = parseInt("10", 8); //返回 8
var iNum3 = parseInt("10", 10); //返回 10
var iNum2 = parseInt("010", 8); //返回 8
var iNum3 = parseInt("010", 10); //返回 10
初试身手:
以前的解决方法是让大家都抛弃 parseInt函数,全部以parseFloat来替换。
最好的办法莫过于保留parseInt的“形”,废了parseInt的“神”。
于是我想到了《JavaScript高级程序设计》87~88页关于“重定义已有方法”的说明。
return "Function code hidden";
}
alert("你好!");
}
alert(sayHi.toString()); //输出"Function code hidden"
Function.prototype.toString = function () {
if(this.originalToString().length >100) {
return "Function too leng to display."
} else {
return this.originalToString();
}
用保存在属性originalTo- String中。然后用定制的方法覆盖了toString()方法。
但是,同时一个致命的问题点也摆在眼前。
于是,上网大查怎样获取Global对象,或怎么使用Global.prototype来改变parseInt函数。
结果可想而知,神就是神,就连著名的“搜神网”Google也查不出来。
欲放弃之时,果然应了那句“死地而后生”。突然想到parseInt就像个全局函数一样,根本不用什么对象调用。
那是不是说,只要把上面那句改成 parseInt = parseFloat;就可以了?
果然,神,无处不在!!! 好用了!!!
深度考究:
问题基本上解决了。只有一点需要注意的,就是JavaScript加载出错的时候,后面的语句就不加载执行了。
所以这句一定要放在第一句执行。现在正好建一个JavaScript通用方法库,要求以后每个页面必须引入该库文件。
所以这一句放在该JavaScript通用方法库的第一行,从此便可高枕无忧。
但是当我在为该段代码写注释,特别是列举如何应用时,发现如下代码的问题
alert(parseInt("010", 8)); //10
alert(parseInt("010", 10)); //10
每一个处理的返回值都是10,也就是说可以处理二进制,八进制,十六进制的parseInt从此消失了。
如果说单个参数的parseInt惹出了不少麻烦,我们对于没有惹祸的两个参数的parseInt还是希望保留其特异功能的。
于是需要进一步的改进。
那么就要根据使用parseInt函数时,传递参数的个数来进行判断处理。
如果只有一个参数,那么就调用parseFloat返回结果。
如果有两个以上的参数,那么就调用parseInt两个参数的处理,返回结果。
这里判断参数个数用到arguments对象,参见《JavaScript高级程序设计》53~54页关于arguments对象的说明。
在函数代码中,使用特殊对象 arguments,开发者无需明确指出参数名,就能访问它们。
if (arguments[0] == "bye") {
return;
}
alert(arguments[0]);
}
parseInt = function (){
if(arguments.length == 1){
return parseFloat(arguments[0]);
} else {
return originalparseInt(arguments[0], arguments[1]);
}
这样我们即便改造了parseInt,依然能通过保留的原型变量originalparseInt使用parseInt的原始功能。
parseInt = function () {
var a = arguments;
if(a.length == 1) {
return $parseInt(a[0],10);
} else {
return $parseInt(a[0], a[1]);
}
};
举一反三:
对parseInt函数的再造就完成了。
那么其实我们可以根据这次改造的经验,改造与parseInt具有类似的烦人特性的JavaScript方法。
譬如,escape,unescape这种已经被 W3C组织不推荐使用的方法就可以用被推荐的方法替换掉
unescape = decodeURI;
那么基于这次的经验,今后遇到类似的问题就可以考虑到用这种乾坤大挪移的方法去解决了。
转载于:https://www.cnblogs.com/sedao/archive/2009/09/05/1560965.html
【原创】parseInt大改造相关推荐
- 闲置台式机+文件服务器,牛人闲置电脑大改造!超低成本组建家用黑群晖NAS
牛人闲置电脑大改造!超低成本组建家用黑群晖NAS 2018-09-12 一.前言: 大家好,俺又来了. 这篇原创很早就在构思怎么写了,因为确实作为一个数码爱好者来说,当得知有 群晖 威联通 这种NAS ...
- NETBOX BT大改造
BOX-NETBOX BT大改造!带全套软件! NETBOX BT大改造!带全套软件! 改造NETBOX!要先准备工具!我这里提供给大家了! ASPACK加壳破解版 c32Asm中文版(精简) ...
- 广州DNA实验室功能区大改造
广州DNA实验室功能区大改造,SICOLAB实验室建设编辑先和您介绍功能区组成,以及装修那些事项: 一.普通实验区--法医物证常规检验室.法医物证存储室.受案室.检材室.骨骼提取实验室.数据比对分析室 ...
- 改纸盒大小_【亲子手工】废旧纸盒大改造,孩子们超级喜欢玩.......
原标题:[亲子手工]废旧纸盒大改造,孩子们超级喜欢玩....... 想要充实幼儿园班级的娃娃家?只要有足够的纸箱材料不就行了,相机.汽车.电话.小镇.停车场等应有尽有-- 作者 丨小莉老师 纸板美颜相 ...
- 学校计算机教室苹果店,苹果给零售店大改造,要把全球的店面变成教室
(原标题:苹果给零售店大改造,要把全球的店面变成教室) 文/周韶宏 下个月,全球的苹果零售店都会迎来一些变化. 苹果周三公布了一项名为"Today at Apple"的计划,全部4 ...
- 搞个服务器安装黑群晖系统,牛人闲置电脑大改造!超低成本组建家用黑群晖NAS...
一.前言: 大家好,俺又来了. 这篇原创很早就在构思怎么写了,因为确实作为一个数码爱好者来说,当得知有 群晖 威联通 这种NAS 的东西存在的时候,就忍不住想体验体验. 但是奈何自己的资金不够,想一想 ...
- [原创]国内大公司开源的安卓有关的库(持续更新中 )
安卓开发一直在用大公司的开源库,下面来整理一下与安卓开发有关的库. 一.阿里巴巴 (一)UI有关 1. 多页面切换场景统一解决方案 UltraViewPager UltraViewPager 是阿里开 ...
- 原创 | 入门“大数据”,你需要通读这18本书
大数据或称巨量资料,指的是需要新处理模式才能具有更强的决策力.洞察力和流程优化能力的海量.高增长率和多样化的信息资产.在移动互联网快速发展的当下,越来越多的工作岗位会运用到大数据技术.了解学习&quo ...
- 文章如何做伪原创 SEO大神教你几招做原创网站文章的心得
想要创作出好的文章并被百度所喜欢,就非常需要SEO的优化能力,以及要对文章进行塬创或伪塬创,那么,如何做伪塬创文章?以及如何做好塬创网站文章呢?对此,本文小编就为大家带来了几招做"塬创&qu ...
最新文章
- python基础实例-Python入门基础知识实例,值得收藏!
- 【转】删除过期数据通用程序
- Python中利用plt显示中文标题解决方案
- 多线程:管cheng法
- 数据结构与算法-算法入门-什么是算法-算法的挑战
- 开源文本编辑器Vim的作者Bram Moolenaar推出了新的编程语言Zimbu.doc
- 全面掌控你的苹果Mac:iStat Menus
- mysql性能剖析工具_MySQL性能剖析工具(pt-query-digest)【转】
- 为什么java导入有x_ImportError:无法导入名称X
- 语义分析的方法简述之文本基本处理
- Java与C++的区别
- CRM客户关系管理系统开发第七讲——实现客户管理模块中删除客户的功能
- 文件怎么复制到虚拟机中的linux系统吗,Windows下的文件如何复制到虚拟机的Linux中...
- caffe+报错︱深度学习参数调优杂记+caffe训练时的问题+dropout/batch Normalization
- 2019 中文互联网资源碎碎念
- android+状态栏显示图标大全,状态栏中的Android显示图标
- clickhouse 如何使用SQL 管理用户和角色
- 天正建筑中如何将标注单位M改为mm
- Unity空间与运动(中山大学3D游戏作业3)
- 草履虫纳米机器人_草履虫大小的微型机器人:由激光驱动,未来可用于显微外科手术!...