Heero's Blog

Heero's Blog » 首页
Dec 7

parseInt的陷阱

  • 作者:heero
  • 时间:2009-12-7 20:24
var a = parseInt("09"), b = Number("09");

很多人会认为a和b的值都是数字9,但实际上不是。

parseInt的主要作用是把字符串转换为整数,或者把小数转换为整数。一般情况下,我们只用到它的第一个参数。但实际上,它有两个参数:

parseInt(string, radix)

parseInt会根据radix指定的进制进行转换,比如:

alert(parseInt("10", 2)); // outputs '2'

在没有指定radix或者radix为0的情况下,parseInt会按十进制进行转换。然而,这在某些情况下有点特殊:

  • 如果string的值以“0x”开头,parseInt会按十六进制进行转换;
  • 如果string的值以“0”开头,parseInt会按八进制进行转换。

说回开头的代码,由于"09"是以“0”开头,所以parseInt会按八进制进行转换,但是“9”不是合法的八进制值(八进制只有0-7八个数字),所以转换结果是0。

要避免这个陷进,可以强制指定radix:

alert(parseInt("09", 10)); // outputs '9'
Dec 4

jRaiser揭秘——事件监听兼容处理

  • 作者:heero
  • 时间:2009-12-4 14:56

在事件监听处理方面,IE提供了attachEventdetachEvent两个接口,而Firefox提供的是addEventListenerremoveEventListener。最简单的兼容性处理就是封装这两套接口:

function addEvent(elem, eventName, handler) {
  if (elem.attachEvent) {
    elem.attachEvent("on" + eventName, handler);
  } else if (elem.addEventListener) {
    elem.addEventListener(eventName, handler, false);
  }
}

function removeEvent(elem, eventName, handler) {
  if (elem.detachEvent) {
    elem.detachEvent("on" + eventName, handler);
  } else if (elem.removeEventListener) {
    elem.removeEventListener(eventName, handler, false);
  }
}

然而,上面两个函数还没把问题完全解决。Firefox下,事件处理函数中的this指向被监听元素本身,而在IE下则不然。要解决这个问题,我首先想

Nov 29

SmartASP 0.2 发布

  • 作者:heero
  • 时间:2009-11-29 22:00

SmartASP是一个ASP类库,其语法与jQuery类似,可以说是服务器端的jQuery。

主要功能和特性

  • 使用Request对象获取参数值的操作封装为$函数;
  • 内置类型扩展,其中String类型的扩展可以方便地进行类型转换;
  • JSON序列化和反序列化;
  • 缓存处理(Application对象的封装);
  • MD5、SHA1数据加密;
  • ADODB.Stream文件上传;
  • DbHelper数据库操作辅助类。

下载

点击进入

0.2版更新 (2009-11-29)

  1. 去掉了$.convert对象的几个方法;
  2. 添加$.cookie和$.session;
  3. 验证模块独立出一个文件;
  4. 调整了$.data.DbHelper的接口。

0.1版发布 (2009-11-24)

Nov 29

表单验证插件 0.1 For jRaiser

  • 作者:heero
  • 时间:2009-11-29 16:47

为了把自己从表单验证中解放出来,特地写了这个插件。下面以一个简单的用户注册表单为例说明用法。

<form id="regForm">
  <input type="text" name="userName" />
  <input type="password" name="password" />
  <input type="password" id="password2" />
  <input type="submit" value="提交" />
</form>

这个表单包含三个输入框,分别是用户名(userName)、密码(password),以及为了防止密码输入出错而设置的第二个密码框(password2)。验证规则如下:

  • 用户名不能为空;
  • 密码不能少于6个字符;
  • 两次密码输入必须一致。

要使用表单验证插件,首先要建立一个验证器对象,其参数是表单元素:

var validator = new $.validate.FormValidator($("#regForm"));

随后添加用户名的验证规则:

validator.addRules("userName", ["noempty", "", "用户名不能为空"]);

addRules方法最少要有两个参数:第1个参数是控件名,第2-N个参数是验证规则。验证规则是一个数组:第0个元素是验证指令,除了上面的"noempty",还有

Nov 21

EditPlus配置手记

  • 作者:heero
  • 时间:2009-11-21 20:31

最近打算换主IDE,主要原因是现在用的Dreamweaver太慢太占资源,特别是打开大文件的时候。而代替者就是EditPlus。下面简单记录一下如何把EditPlus配置成一个编程IDE。

首选项

无论是什么软件,一般都要先改全局设置,也就是首选项。

常规

常规

  • 还原最近文件的光标/标记/编码方式:这个一定要勾上,否则就不能保存代码折叠
  • 使用XHTML标签:标准化网页。
  • 自动关闭HTML标签:勾上这个以后,输入“<”后就会自动补全“>”,光标在两个字符之间。
Nov 20

IIS 7.5 下PHP(FastCGI模式)配置手记

  • 作者:heero
  • 时间:2009-11-20 15:18

最近PHP又出了新版本5.3.1,趁着有空也更新到自己的机器上。

版本选择

PHP 5.3 For Windows有4个版本:

  • VC9 x86 Non Thread Safe
  • VC9 x86 Thread Safe
  • VC6 x86 Non Thread Safe
  • VC6 x86 Thread Safe

官网已经注明,VC9的版本是给IIS用的,VC6的版本是给Apache用的。之所以要这样区分,是因为VC9版本是用Visual Studio 2008编译的,编译器对程序进行了更多的优化,因而性能较好。至于Thead Safe(线程安全)/Non Thead Safe(非线程安全),官网并没有说明各自用途何在。Google了一番以后,我找到了答案:FastCGI是单线程执行的,因而不需要线程安全版本,去掉线程安全的防护后可以提高执行效率;而ISAPI方式则是多线程模式,所以需要采用线程安全版本。

之前尝试过安装5.3版本,可是一直运行出错,无奈之下只好退回5.2版。这回在官网发现了一句提示,说VC9版本需要先安装VC2008运行库32位/64位)。上次应该就是漏了装这个东西。

配置php.ini

无论是在Linux还是Windows下安装,这都是不可忽略的一步。以下配置是必须的:

date.timezone = "Asia/Shanghai"
fastcgi.impersonate = 1
cgi.fix_pathinfo = 1
cgi.force_redirect = 0
extension_dir =
  1. « 上一页
  2. 1
  3. 2
  4. 3
  5. 4
  6. 5
  7. 6
  8. 7
  9. 8
  10. 9
  11. 10
  12. 11
  13. 12
  14. 13
  15. 下一页 »