asp jscript编程(1)
URL:http://blog.iyi.cn/start/2005/04/asp_jscript1.html
今天开始修改我以前做得那个访问统计小插件,顺便加强一下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'就可以得到正确的结果了。
自己测试整理的,不当的地方,还望各位指正。
评论:
win上有javascript吗? 你输出引擎看看?
by: panliu888 | April 24, 2005 1:28 PM
应该有的吧?客户端跟服务器端的脚本引擎会不同?
不知道怎么输出引擎,刚才在网上找了一通,一般认为javascript跟jscript没多少区别,有可能是当作jscript解释的。
找到这么一个说明:
Windows Scripting Host (WSH) 是一个独立于语言的脚本主机,用于 32 位 Microsoft®Windows® 操作系统平台上。Microsoft 同时给 Visual Basic® Script 以及 Java Script 脚本引擎提供了 WSH。Microsoft 预计,其它软件公司将会给其它一些语言(如 Perl、TCL、REXX 以及 Python)提供 ActiveX® 脚本引擎。
Microsoft 现为在 Windows 平台上运行这些脚本语言提供三种主机:
Microsoft Internet Explorer
Internet Information Server (IIS)
Windows Scripting Host (WSH)
by: david | April 24, 2005 3:03 PM
我也是猜测的
因为我发现
alert(ScriptEngine());和
都是输出 JScript
客户段(ie)跟服务器用的一样的脚本引擎, 而且这个脚本引擎可以被引用, MSScriptControl.ScriptControl
所以我就猜测:),win上见不着javascript了, 好象应该说ms把jscript来充当javascript, ms喜欢这样干
by: panliu888 | April 24, 2005 6:20 PM
当然, ff等mozilla浏览器上, 用的是正宗javascript :)
by: panliu888 | April 24, 2005 6:21 PM
哈,刚才又看了一下,那个是ie3时代的,现在确实都是JScript了!我把文章改一下。
by: david | April 24, 2005 7:20 PM
david说的很对啊,不管学什么,关键是个态度。javaScript不明白,比较少用啊。
by: henry | April 26, 2005 6:27 PM
想和你探讨你在云麓上的一个帖子```
asp#javascript编程(1)
by: denglinjun | May 4, 2005 8:38 PM
想和你探讨你在云麓上的一个帖子```
asp#javascript编程(1)
我也碰到过你那样的问题
但是我采用的解决方法很简单的
var requestStr = Request(str);
直接改为:var requestStr =""+ Request(str);
这样,JS会自动识别它是一个字符串``而不是一个对象```
by: 邓林军 | May 4, 2005 8:46 PM
哦,原来是这样
怪不得Response.write('str:'+requestStr);打印出undefined
俺的文章居然贴到了云麓,呵呵
by: david | May 4, 2005 10:41 PM
I just got into blogging and I absolutely love it, so thanks, I keep track of this blog as well as 5 others so far.
by: Bruce Parker | May 24, 2005 8:44 AM
正宗的ASP还是vbscript,js用途太少了
by: beian | July 9, 2005 10:44 PM