存档

‘JAVASCRPT’ 分类的存档

Javascript中parseInt函数的进制问题

2009年8月4日 admin 没有评论

在使用parseInt转换日期2009-08-08的时候,parseInt("08")或者parseInt("09")返回的居然是0,而 parseInt("01")…parseInt("07")都是正确的,一开始很难理解,后来发现出现这个问题的原因是当在前面有"0" 时,javascript的debugger会认为这是一个八进制数,而"08"和"09"不是一个合法的八进制数,所以导致了那个问题,但是parseFloat不会存在这个问题。

    事实上,parseInt方法有一个可选参数来表示数字的进制,所以这应该不能算是一个bug,只是我们平时没有注意到这种细节问题。那么解决的方法很简单,就是使用parseInt("08",10)或者parseInt("09",10),通知javascript解释器使用十进制来解析就可以了。

参考资料

https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Functions/parseInt

parseInt Bug

分类: JAVASCRPT 标签:

Javascript Chart

2009年7月2日 admin 没有评论

今天早上心血来潮打算捣鼓一个本人的开发技能统计图表放到Blog上,想用Javascript Chart的方式来实现。Google了一下Javascript Chart的解决方案,发现下相关的解决方案还真不少

几个不错的解决方案

Flot

 

从交互性的层面来说,基于jQuery实现的 Flot图表和Flash实现的图表效果已经是非常的接近。图表输出效果相当的流畅光滑,注重视觉效果。你也可以和data points数据节点配合使用,当鼠标hover到某个数据节点时,会得到对应节点的数值说明内容的反馈信息。

如上图所示,你也可以选择图表的一部分内容,获得这些特殊区域的数据;同时,你还可以对数据节点进行放大处理。

优势: 线条、节点、区域填充、柱状图以及以上功能的组合。

Google Charts Plugin

严格以上说这个算不上一个纯粹的Javascript解决方案,Google Charts plugin 是通过jQuery插件将Google Charts API应用到Web程序的一个非常简单的方式。而Google Charts API是基于服务端来生成图片的。但也正式因此Google Charts Plugin可以实现其他一些纯Javascript Chart方案实现不了的功能,下面这张图是Google Charts API支持的图形和参数。

1

Javascript Chart的实现原理

w3c HTML5.0 方案确定了一个Canvas元素用来支持HTML中的图形功能,火狐很早的版本就支持了这个元素,可惜的是 IE 不支持这个元素。还是Google比较强,推出的一个专门让IE支持 Canvas元素的扩展包,即excanvas.js,不过本质上是在IE下用vml 来模拟canvas,所以只能有部分的Canvas属性方法得到支持,vml详细的内容可以参考VML这篇文章。

相关资料

6个jQuery图表Web应用扩展

VML

JavaScript用canvas元素实现 2D 和 3D [转]

推荐一个很棒的JS绘图库Flot
分类: JAVASCRPT 标签: , , ,

javascript异常处理使用总结try…catch…finally window.onerror

2009年6月21日 admin 没有评论

try catch finally 语句说明

try catch finally是javascript语言提供的异常处理机制。语法结构如下

try {
  //这段代码从上往下运行,其中任何一个语句抛出异常该代码块就结束运行
}
catch (e) {
  // 如果try代码块中抛出了异常,catch代码块中的代码就会被执行。
  //e是一个局部变量,用来指向Error对象或者其他抛出的对象
}
finally {
  //无论try中代码是否有异常抛出(甚至是try代码块中有return语句),finally代码块中始终会被执行。
 }

try…catch…finally…语法中除了try以外catch和finally都是可选的(两者必须要有一个),也就是说try…catch…finally…语法有以下三种形式

try{

//some code

}

catch(e){

//somecode

}

finally{

//some code

}

try{

//some code

}

catch(e){

//somecode

}

try{

//some code

}

finally{

//some code

}

如果有一定catch,一旦try中代码抛出异常以后就是先执行catch中的代码,然后执行finally中的代码。如果没有catch语句,try中的代码抛出异常后,就会先执行finally中的语句,然后将try中抛出的异常以异常的方式继续往上抛。

不管try代码块的执行时如何被终止的(出现异常、return、自然终止)finally中的语句始终会被执行,正是由于finally的这种特性,通常finally用来执行一些清理工作。如果try中代码是以return,continue,break的方式终止的,Javascript引擎会在执行完finally中的语句以后再执行相应的try中的返回语句。

throw语句说明

    throw语句在javascript1.4中已经实现。try的语法很简单,如下
throw expression;

其中的expression可以是任何一种类型,也就是说throw “There is a error” 或是throw 1001都是正确的。但通常我们会抛出一个Error对象或是Error对象的子类。关于Error我们稍后介绍,先看一段throw的样例代码。

function factorial(x) {
    // If the input argument is invalid, throw an exception!
    if (x < 0) throw new Error("x must not be negative");
    // Otherwise, compute a value and return normally
    for(var f = 1; x > 1; f *= x, x--) /* empty */ ;
    return f;
}

Error对象

Error对象和它的子类是在javascript1.5中实现的。Error的构造函数有两种

new Error( )
new Error(message )

Error有两个基本的属性name和message。message用来表示异常的详细信息。而name指的的是Error对象的构造函数。此外,不同的js引擎对Error还各自提供了一些扩展,例如mozilla提供了fileName(异常出现的文件名称)和linenumber(异常出现的行号)的扩展,而IE提供了number(错误号)的支持。不过name和message是两个基本的属性,在firefox和ie中都能够支持。Javascript中Error还有几个子类EvalError, RangeError, ReferenceError, SyntaxError, TypeError, URIError,各自的意思就不在这里详细描述了,读者可以在我提供的参考文档中找到相应的参考。

Javascript的异常处理机制和window.onerror句柄

当javascript代码中出现错误的时候,js引擎就会根据js的调用栈逐级寻找对应的catch,如果没有找到相应的catch handler或catch handler本身又有error或者又抛出新的error,最后就会把这个error的处理交给浏览器,浏览器会用各自不同的方式(IE以黄色三角图案显示在左下角,而firefix会显示在错误控制台中)显示错误信息给访问者。很多场景下,我们会觉得这种错误提示方式不够友好,而且提示信息很隐蔽,那么我们机会自定义这种错误提示的方式吗?答案是有,就是window.onerror属性。

javascript的window对象有一个特别的属性onerror,如果你将某个function赋值给window的onerror属性,那么但凡这个window中有javascript错误出现,该function都会被调用,也就是说这个function会成为这个window的错误处理句柄。

// Display error messages in a dialog box, but never more than 3
window.onerror = function(msg, url, line) {
    if (onerror.num++ < onerror.max) {
        alert("ERROR: " + msg + "\n" + url + ":" + line);
        return true;
    }
}
onerror.max = 3;
onerror.num = 0;

onerror句柄会3个参数分别是错误信息提示,产生错误的javascript的document ulr,错误出现的行号。

onerroe句柄的返回值也很重要,如果句柄返回true,表示浏览器无需在对该错误做额外的处理,也就是说浏览器不需要再显示错误信息。而如果返回的是false,浏览器还是会提示错误信息。

window.onerror=function(){

alert(”xx”);

return true; //如果注释掉该语句,浏览器中还是会有错误提示,反之则没有。

}

function throwerror(){

throw new Error(”cc”);

}

1

我们在开发HTML的过程中避免不了一些Js的异常,通常我们也不可能依赖客户打开浏览器的错误提示框(如上图)来为我们定位bug提供线索,而利用window.onerror句柄我们就可以讲错误提示信息显示出来,客户只要在错误出现的时候,提供相应的截屏就可以了,这点可以很好的帮助开发人员定位,分析javascript相关的错误。

参考资料

Mozilla Javascript1.5核心参考

Javascript犀牛(JavaScript: The Definitive Guide)

分类: JAVASCRPT 标签: