asp.net中eval不能定義變量的問題的解決方法
2024-07-10 12:44:12
供稿:網友
代碼如下:
eval.asp
<%@ LANGUAGE='JAVASCRIPT'%>
<script Language="javascript" runat=server>
eval("var f1=1,f2=2,f3=3;");
Response.Write(f1+"<br/>");
Response.Write(f2+"<br/>");
Response.Write(f3+"<br/>");
</script>
運行結果:
1
2
3
eval01.aspx
<%@ LANGUAGE='JAVASCRIPT' DEBUG="true"%>
<script Language="javascript" runat=server>
eval("var f1=1,f2=2,f3=3;");
Response.Write(f1+"<br/>");
Response.Write(f2+"<br/>");
Response.Write(f3+"<br/>");
</script>
第三行出現語法錯誤!
可以通過對一個空對象動態加屬性的方法,解決按表字段來定義變量的問題:
表名:T
F1 int,
F2 char(10),
F3 datetime
asp:
eval(“var F1='',F2='',F3='';”);
Response.Write(“F1=”+F1);
aspx:
var T={};
T[“F1”]=””;
T[“F2”]=””;
T[“F3”]=””;
Response.Write(“F1=”+T.F1);
<%@ LANGUAGE='JScript' DEBUG="true"%>
<%
var TAB={
};
var n=12;
var FLD;
for(var i=0;i<n;i++)
{
FLD= "F0"+((i<10)?("00"):((i<100)?("0"):("")))+i;
TAB[FLD]=i+1000;
}
for(var i=0;i<n;i++)
{
FLD= "F0"+((i<10)?("00"):((i<100)?("0"):("")))+i;
Response.Write(TAB[FLD]+"<br/>");
}
%>
微軟官方網站上對Jscript8.0的說明:
http://msdn.microsoft.com/zh-cn/library/8e4z2w8w(v=vs.90).aspx#jsconupgradingapplicationcreatedinpreviousversionsofjscriptanchor7
升級先前的 JScript 版本中創建的應用程序
Visual Studio 2008
其他版本
·Visual Studio 2010
·Visual Studio 2005
此主題尚未評級 - 評價此主題
更新:2007 年 11 月
大多數現有的 JScript 代碼都可以很好地使用 JScript 8.0 中包含的增強功能,因為對于以前的版本,JScript 8.0 幾乎是完全向后兼容的。JScript 8.0 的新功能開創了新的天地。
默認情況下,JScript 8.0 程序是在快速模式 中編譯的。由于快速模式對所允許的代碼類型有一些限制,因此程序可能會更有效并執行得更快。但是,以前版本中可用的一些功能在快速模式下不可用。這些功能大部分與多線程應用程序不兼容,并會使代碼效率低下。對于用命令行編譯器編譯的程序,可以關閉快速模式,而利用完全的向后兼容性。注意,用這種方法編譯的代碼運行得較慢,容錯性也較差。在 ASP.NET 應用程序中不能關閉快速模式,因為會出現穩定性問題。有關更多信息,請參見 /fast。
快速模式
在快速模式中,會觸發以下 JScript 行為:
· 必須聲明所有變量。
· 函數變為常數。
· 內部對象不能有 expando 屬性。
· 不能列出或更改內部對象的屬性。
· arguments 對象不可用。
· 不能給只讀變量、字段或方法賦值。