今天开始修改我以前做得那个访问统计小插件,顺便加强一下asp和javascript。(确切的说应该是JScript,自从ie4.0以后,微软就用自己的JScript了,跟javascript基本上没什么区别。大概是脚本引擎将javascript,JScript都用JScript解释。)
asp用了很久了,可是一直没有认真学习过,很多东西含混不清,javascript也是。本来已经不想再用asp了,但是这段时间看了些东西,发现原来我很菜,既然学了,就把它学好;也不是为了学习asp而学,学什么都一样,关键是一个态度。
之所以选择javascript,一是感觉javascript比vbscript要规范;二是javascript在客户端还是必不可少的;三是跟java之类语法有些相似。
刚刚开始写,可能比较零乱,只是做个记录,待日后再整理。
首先是用javascript书写asp方法:
1.在iis中设置默认脚本语言为javascript,在站点属性-主目录-配置-默认asp语言
2.在asp文件第一行用<%@LANGUAGE=JAVASCRIPT>指定脚本语言
3.用<SCRIPT RUNAT=SERVER LANGUAGE=JAVASCRIPT></SCRIPT>指定服务器端执行脚本,我选择了这种,因为这样EditPlus才可以正确显示脚本颜色和标记,便于书写和排错。
Global.asa
这个文件的功能我就不多说了,在网上找了一下,全都是vbscript的例子。vbs的过程跟js中的function应该是等价的,可以用。
<SCRIPT LANGUAGE=javascript RUNAT=Server>
function Application_OnStart() {
Application('VERSION') = '0.1';
}function Application_OnEnd() {
}
function Session_OnStart() {
}
function Session_OnEnd() {
}</SCRIPT>
在另一个asp文件中Response.write(Application('VERSION'));可以看到结果。(需要注意的是javascript调用asp内置对象首字母要大写。这也算是个好习惯。)
数据类型判断:
今天碰到一个小问题,判断一个变量的数据类型。js有typeof()函数可以返回一个对象的类型,对象的constructor方法可以返回一个对象的原始构造函数。
当直接赋值给一个变量的时候,可以返回正确的类型,但是当用初始化的方法赋值时,typeof()返回的总是object
比如:
var figure = 3;或者var figure = Number('3'); Response.write(typeof(figure));返回的是Number
var figure = new Number('3'); 或者从asp内置对象Request中获得的数值(如:var figure = Request(str);),返回的就是object
但是Response.write(figure.constructor);得到的却是同样的结果:function Number() { [native code] }
测试是否为Number可以用figure.constructor == Number来判断。
同时我还找到javascript的一个全局函数:isNaN
当我们赋给figure的值是数值时,isNaN返回False,否则返回True。比如:isNaN(a=1); isNaN(a='1'); isNaN(a= Number('1')); isNaN(a=new Number('1'));返回的都是False,isNaN(a='1a')等返回的是True。我在网上找到很多用js写的IsNumeric函数,有些笨拙了。
另外,当Request对象返回一个空值时,javascript中得到的这个空值我不知道怎么比较。
比如:var requestStr = Request(str);返回一个空值
当直接用Response.write(requestStr);什么都没有显示,但是Response.write('str:'+requestStr);却打印出来一个undefined。
用requestStr == 'undefined' requestStr == '' 都不能得到正确的结果。
最后我用比较笨拙的办法,var requestStr = new String(Request(str));这样再用requestStr == 'undefined'就可以得到正确的结果了。
自己测试整理的,不当的地方,还望各位指正。