日期:2009-03-12 浏览次数:20480 次
大家一定习惯于使用vb.net和C#来创建asp.net页面,但是不知大家知不知道我们还可以使用Jscript.net编写asp.net.
这可能是自微软1996年推出基于IE3.0的Jscript1.0以来在功能上最大的飞跃。JScript 传统上被用作开发客户端脚本。在internet上它普遍存在,特别是在Active sever page(ASP)中 。
当脚本变得很大的时候,程序员需要编写更有效的代码;并且程序变得越来越复杂,程序员往往受到Jscript的局限性。
如果你对Jscript很熟悉的话,你将很快的在.net平台上使用Jscript.net,应为Jscript.net就像是Jscript的升级版,而不是一门新的语言。
Jscript.net最新的特性是Jscript.net是真正的编译语言。这使它完全可以与vb.net和C#相媲美。从语法方面,Jscript.net改善了变量类型的定义,不但支持明确的变量类型定义,还支持模糊的变量类型定义。模糊定义是一项激动人心的技术,它可以分析你脚本中使用的变量,并且推断出变量的类型。这就意味着你可以使用未定义的变量并以更快的速度执行。
请参照下面的例子:
function test()
{
for (var x = 0; x < 100; x++)
{
print(x);
}
}
当Jscript.net编译这个程序的时候,它分析变量X的用途并确定变量X只用做数值型,结果变量被安全的定义为数值型。技术进步在于把变量定义为数值型要明显优于把变量定义为generic Object 或 variant。
为了实现Jscript.net的推断变量类型的功能,你需要遵守以下几条规则!
一. 永远声明你的局部变量。这看起来像是显而易见的,但是这是非常重要的,Jscript.net只能推断你的局部变量,而不是全局变量。如果你没有声明它,直接使用,它就将成为全局变量,将不能被优化。
二. 仅使用一种数据类型,如果你声明一个数值型变量,却用来储存字符型的数据,Jscript将把该变量定义为generic Object 或 variant。
//无法推断类型 -- glob 是一个全局变量
var glob = 42;
function myfunc()
{
//无法推断类型-- s 没有定义因此它被当作全局变量
s = "hello";
// 可以推断类型
var i = 0;
//无法推断类型—q被指派成其他的类型
var q = new Date();
q = 3.14159;
}
尽管类型推断是非常好的功能,但是它还是有一定的缺点的。它无法帮助我们捕获类型不匹配或其他的错误。为了解决这个问题,Jscript.net提供一种方法明确定义变量的类型。通过例子,你将很容易的了解它的使用方法。
// 定义数值类型
var myInt : int = 42;
// 定义一个函数,返回一个字符串
function GetName() : String
{
// 程序行
}
// 定义一个带两个参数的函数返回一个逻辑类型
function CheckNumber(dVal : double) : Boolean
{
// function code
}
下面给出一个完成的函数,仔细的体会一下。
function getConditions(strCity : String) : String
{
var now : Date = new Date();
switch (strCity.toUpperCase())
{
case "LONDON":
if (now.getMonth() <= 7 || now.getMonth() >= 9)
{
return "overcast";
}
else
{
return "partly overcast and humid";
}
break;
case "SEATTLE":
if (now.getMonth() == 7 && now.getDay() == 4)
{
return "torrential rain";
}
else
{
return "rain";
}
break;
case "LA":
return "smoggy";
break;
case "PHOENIX":
return "damn hot";
break;
default:
return "partly cloudy with a chance of showers";
}
}
使用Jscript.net,你也可以定义其他.net架构的类型,通过引用命名空间和派生类可以向Jscript.net引入新的数据类型。这样在两者的数据类型中就有可能产生重叠。参见下表:
Boolean .NET Framework Boolean / JScript boolean
Number .NET Framework Double / JScript number
String .N