当前位置: 首页 > 图文教程 > 网络编程 > Javascript > 我与Javascript 随笔(二)

Javascript
将HTML自动转为JS代码
一端时间轮换的广告
制作特殊字的脚本
美化下拉列表
文字幻灯片
判断是否输入完毕再激活提交按钮
JS控制表格隔行变色
左右两侧的广告代码 简单
父窗口获取弹出子窗口文本框的值
网页的标准,IMG不支持onload标签怎么办
一个很简单的办法实现TD的加亮效果.
文本框栏目介绍
自动检查并替换文本框内的字符
会自动逐行上升的文本框
列表内容的选择
对textarea框的代码调试,而且功能上使用非常方便,酷
提高代码性能技巧谈—以创建千行表格为例
Javascript的IE和Firefox兼容性汇编
让插入到 innerHTML 中的 script 跑起来
DEFER怎么用?

我与Javascript 随笔(二)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-10   浏览: 60 ::
收藏到网摘: n/a

[注:为方便起见, Javascript简称为JS

ASP网络应用程序的开发过程中,将我从纯客户端的环境下使用JS的行为摆脱出来,开始以另一种方式使用JS:针对服务端应用的JS脚本。

 

我不想讨论怎样采用ApplicationSessionRequestResponse以及ADOCOM服务对象结合VBScript(或JS)脚本语言进行服务端编程的详细规则,也不想让同为浏览器的脚本语言的VBScriptJS较量一番,只是简单讲一下自已在ASP编程中采用JS作为客户端脚本语言开发的一点体会。

 

为减轻服务端处理数据的压力,对于客户端提交至服务端的大量表单(Form)数据必须先经过处理或有效性的验证,在对这些数据的处理过程中,JS中的StringArray对象是非常好的选择,而 Array对象存储各种类型数据(从基本的数值型到字符串再到对象类型)的能力常让我怀疑是否正在使用MFC中的CArray模板类,记得有一次需要对服务端返回的多个字符串数据进行类似队列的循环处理,然后将处理的数据再返回至服务端,使用Array对象的栈和队列功能,使我很轻松地解决这个问题。解析和验证诸如电子邮件地址、身份证号、电话号码、文本框输入字符等常用的字符串正确表达规则,以前通常的做法是无穷无尽的if...elsewhile判断,现在采用RegExp对象后,验证字符串正确表达规则的代码不仅精炼而且非常有效(当然,RegExp的语法也是最关键的,处理不好也非常容易掉入陷阱)。

有些看似不可接受的语法,居然在JS中使用频率非常之高,举个例子,类似一个字符串”abcde”,要查找”c”是第几个字符,我可以这么写:”abcde”.indexOf(“c”),很独特的写法,还有new String(“abcde”).indexOf(“c”)同样能够实现这个功能。虽然一开始我也不太接受这些语法,但是写客户端的JS脚本越多,我越感到使用这些语法的必要性,它对程序的可读性和维护是非常有好处的。JS的灵魂就在于简炼(请记住,不是简单)。

在面向服务端应用的开发中,使用JS编写DHTML文档是非常有必要的事情,我的一个实际案例:用户需要根据自已的要求生成不确定的、大量重复性的HTML表格,每个表格里又包含许多Form控件。想像一下,这件事如果由ASP服务端脚本来完成,那将会是一种什么情况?首先,用户说我要生成5个表格,服务端收到这个请求后,先定义一个表格模板,然后以循环方式在服务端动态生成5个表格,最后返回用户所需的HTML文档。当随着请求用户的增多和请求的表格数的增加,服务器的负载将不能得到保证。如果由JS采用同样的方法为用户在客户端动态生成这些表格,那将是一件非常美妙的事,具体规则是JS操作 DOM(文档对象模型),生成动态的表格。

 

面向对象的特性使我对JS感到不解,在客户端的DHTML开发中真的需要面向对象吗?JS不是一种纯面向对象的语言,虽然可以实现或伪实现某些诸如继承、多态的面向对象语言的特性,但这些东西经常在DHTML使用吗?正如我曾经看过的一本书《JavaScript完全参考》中所述:大多数JS程序员使用的还是一团浆糊式的编程。我的原则是:尽可能采用过程式的JS编程,也不用面向对象的方法!偏激了点,的确在许多实际应用开发中,牺牲过程式的编程而勉强采用面向对象的方式有时是恰如其反。

 

今天,ASP.NET正在把Web开发中面向客户端处理的细节隐藏起来,但我始终不会忘记一个灵活、高效且非常健壮的客户端如果失去了JS,那么也就失去了Web开发真正的魅力。

 

这篇随笔还没有真正的结束,让它先暂停一下吧,同时期待自已对JS有更多的理解:)       

                                        yjgx 于 2004-2-27 22:00