asp jscript编程(1)

Author: | 【转载时请务必以超链接形式标明文章原始出处和作者信息及本声明
URL:

今天开始修改我以前做得那个访问统计小插件,顺便加强一下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吗? 你输出引擎看看?

应该有的吧?客户端跟服务器端的脚本引擎会不同?
不知道怎么输出引擎,刚才在网上找了一通,一般认为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)

我也是猜测的

因为我发现
alert(ScriptEngine());和

都是输出 JScript
客户段(ie)跟服务器用的一样的脚本引擎, 而且这个脚本引擎可以被引用, MSScriptControl.ScriptControl
所以我就猜测:),win上见不着javascript了, 好象应该说ms把jscript来充当javascript, ms喜欢这样干

当然, ff等mozilla浏览器上, 用的是正宗javascript :)

哈,刚才又看了一下,那个是ie3时代的,现在确实都是JScript了!我把文章改一下。

david说的很对啊,不管学什么,关键是个态度。javaScript不明白,比较少用啊。

想和你探讨你在云麓上的一个帖子```

asp#javascript编程(1)

想和你探讨你在云麓上的一个帖子```

asp#javascript编程(1)

我也碰到过你那样的问题
但是我采用的解决方法很简单的
var requestStr = Request(str);
直接改为:var requestStr =""+ Request(str);
这样,JS会自动识别它是一个字符串``而不是一个对象```

哦,原来是这样
怪不得Response.write('str:'+requestStr);打印出undefined
俺的文章居然贴到了云麓,呵呵

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.

正宗的ASP还是vbscript,js用途太少了

(选填)

(必填)

(选填)


Clicki