Lua与javascript的差异

2010-03-08

Lua模拟器js方案

1.语法级模拟

lua与js语言差异

1.1注释

js 为//,lua为--.

1.2变量

js利用var来声明全局变量不存在局部变量,lua则不需要直接定位则为全局变量,local声明则为局部变量。

1.3运算符

js

+ - * / % ++ --

= += -= *= /= %=

支持字符串 +

txt1 = "what a very";

txt2 = "nice day";

txt3 =txt1+txt2;

打印txt3输出结果为"what a very nice day".

规则:

把数字与字符串相加,结果将成为字符串.

lua

二元:+ - * / ^ %

一元:-(负号)

lua字符串拼接为..

如"Hello ".."World"拼接成Hello World

1.4关系操作符

js关系操作符

== ===(全等) != > < >= <=

lua关系操作符

< > <= >= == ~=(不等于)

1.5 逻辑运算符

js

&& || !

lua

and or not

1.6 If ...Else语句

js 类c

if else

lua

if then else

if then

elseif then

else

end

一定要有end

1.7 Switch语句

lua不支持Switch 语句

1.8 消息框

js

警告框 alert("文本")

确认框 prompt("文本","默认值")

lua

扩展支持警告框和确认框

1.9 函数

js

function 函数名(参数)

{

  代码...

}

js带{}类 c

lua

function 函数名( 参数)

end

lua类vb 脚本

2.0 For 循环

js:类c

for (i=0;i<=10;i++)

{

document.write("The number is " + i)

document.write("<br />")

}

lua:分两种 数字型For 和泛型For

数字型For:

for var= exp1,exp2,exp3 do

<执行体>

end

var从exp1变化到exp2,step为exp3递增

不指定exp3默认为1

for i =1,100 do

print(i)

end

for i =1,100,2 do

print(i)

end

泛型For

泛型For循环通过一个迭代器(iterator)函数来遍历所有值:

--打印数组a 的所有值

for i,v in pairs(a) do

print(v)

end

Lua基础库提供了ipairs,这是一个用于遍历数组的迭代器函数。

在每次循环中i会被赋予一个索引值,同时v会被赋予一个对应于该索引的数组元素值。

---打印table t中所以的key

for k in pairs(t) do print(k) end

2.1 While循环

js: 类c

while (变量<=结束值)

{

需执行的代码

}

lua:

i =1;

while a[i] do

print(a[i])

i = i+1;

end

同时lua还支持repeat:支持repeat-until语句实现循环.

repeat:

line = io.read()

until line~=""

print(line)

上面的代码:读取line直到line不为""的时候结束,并打印此line的值。

2.2 Break 和 Continue

js:类c

有两种可以用在循环中的语句:break 和 continue

Break

break

命令可以终止循环的运行,然后继续执行循环之后的代码(如果循环之后有代码的话)。

Code示例:

<script type="text/javascript">

var i=0

for (i=0;i<=10;i++)

{

if (i==3){break}

document.write("The number is " + i)

document.write("<br />")

}

</script>

Continue

continue 命令会终止当前的循环,然后从下一个值继续运行。

<script type="text/javascript">

var i=0

for (i=0;i<=10;i++)

{

if (i==3){continue}

document.write("The number is " + i)

document.write("<br />")

}

</script>

Lua:

支持break,但不支持continue.

local i =1

while a[i] do

if a[i] == v then break end

i = i +1

end

2.3 For...In 声明

js:用For...In 声明专门遍历数组内的元素。

For...In 声明用于对数组或者对象的属性进行循环操作。

for ... in

循环中的代码每执行一次,就会对数组的元素或者对象的属性进行一次操作。

语法:

for (变量 in 对象)

{

在此执行代码

}

Code:

<script type="text/javascript">

var x

var mycars = new Array()

mycars[0] = "Saab"

mycars[1] = "Volvo"

mycars[2] = "BMW"

for (x in mycars)

{

document.write(mycars[x] + "<br />")

}

</script>

Lua:很简单直接用泛型的For取代即可.

2.4 事件

JS:

事件是可以被 JavaScript 侦测到的行为。

事件

JavaScript 使我们有能力创建动态页面。事件是可以被 JavaScript侦测到的行为。

网页中的每个元素都可以产生某些可以触发 JavaScript 函数的事件。比方说,我们可以在用户点击某按钮时产生一个onClick 事件来触发某个函数。事件在 HTML页面中定义。

事件举例:

鼠标点击

页面或图像载入

鼠标悬浮于页面的某个热点之上

在表单中选取输入框

确认表单

键盘按键

注意:事件通常与函数配合使用,当事件发生时函数才会执行。

----------------------------------------------------------------------------

onload 和 onUnload

当用户进入或离开页面时就会触发 onload 和 onUnload 事件。

onload事件常用来检测访问者的浏览器类型和版本,然后根据这些信息载入特定版本的网页。

onload 和 onUnload 事件也常被用来处理用户进入或离开页面时所建立的cookies。

例如,当某用户第一次进入页面时,你可以使用消息框来询问用户的姓名。

姓名会保存在 cookie中。当用户再次进入这个页面时,你可以使用另一个消息框来和这个用户打招呼:"WelcomeJohn Doe!"。

----------------------------------------------------------------------------

onFocus, onBlur 和 onChange

onFocus、onBlur 和 onChange 事件通常相互配合用来验证表单。

下面是一个使用 onChange 事件的例子。用户一旦改变了域的内容,checkEmail()函数就会被调用。

<input type="text" size="30" >

onSubmit

onSubmit 用于在提交表单之前验证所有的表单域。

下面是一个使用 onSubmit

事件的例子。当用户单击表单中的确认按钮时,checkForm() 函数就会被调用。

假若域的值无效,此次提交就会被取消。checkForm() 函数的返回值是 true 或__________者false。如果返回值为true,则提交表单,反之取消提交。

<form method="post" action="xxx.htm" onsubmit="return checkForm()">

----------------------------------------------------------------------------

onMouseOver 和 onMouseOut

onMouseOver 和 onMouseOut 用来创建“动态的”按钮。

下面是一个使用 onMouseOver 事件的例子。当 onMouseOver事件被脚本侦测到时,就会弹出一个警告框:

<a href="http://www.w3school.com.cn"

onmouseover="alert('An onMouseOver event');return false">

<img src="w3school.gif" width="100" height="30">

</a>

----------------------------------------------------------------------------

lua:

可以binding这些事件即可,问题不大.

2.5 Try...Catch

js支持Try...Catch

Lua目前还做不到。支持assert函数扩展,以及debug.backtrace来定位函数错误调用栈。

2.6 Throw 声明

js支持throw抛异常. lua可以扩展支持thow函数。

2.7 onerror事件

js可以支持. lua无法兼容,最多扩展模拟。

2.8 特殊字符(转义字符\)

JS:

\' 单引号

\" 双引号

\& 和号

\\ 反斜杠

\n 换行符

\r 回车符

\t 制表符

\b 退格符

\f 换页符

插入特殊字符

反斜杠用来在文本字符串中插入省略号、换行符、引号和其他特殊字符。

var txt="We are the so-called \"Vikings\" from the north."

document.write(txt)

lua:

print("one line\nnext line\n\"in quotes\",'in quotes'")

--->

one line

next line

"in quotes",'in quotes'

----------------------------------------------------------------------------

3.0 javascript对象以及lua如何模拟

3.1 字符串(String)对象

js:

字符串对象

字符串对象用于处理已有的字符块。

String 对象的方法

anchor() 创建 HTML 锚。

big() 用大号字体显示字符串。

blink() 显示闪动字符串。

bold() 使用粗体显示字符串。

charAt() 返回在指定位置的字符。

charCodeAt() 返回在指定的位置的字符的 Unicode 编码。

concat() 连接字符串。

fixed() 以打字机文本显示字符串。

fontcolor() 使用指定的颜色来显示字符串。

fontsize() 使用指定的尺寸来显示字符串。

fromCharCode() 从字符编码创建一个字符串。

indexOf() 检索字符串。

italics() 使用斜体显示字符串。

lastIndexOf() 从后向前搜索字符串。

link() 将字符串显示为链接。

localeCompare() 用本地特定的顺序来比较两个字符串。

match() 找到一个或多个正在表达式的匹配。

replace() 替换与正则表达式匹配的子串。

search() 检索与正则表达式相匹配的值。

slice() 提取字符串的片断,并在新的字符串中返回被提取的部分 。

small() 使用小字号来显示字符串。

split() 把字符串分割为字符串数组。

strike() 使用删除线来显示字符串。

sub() 把字符串显示为下标。

substr() 从__________起始索引号提取字符串中指定数目的字符。

substring() 提取字符串中两个指定的索引号之间的字符。

sup() 把字符串显示为上标。

toLocaleLowerCase() 把字符串转换为小写。

toLocaleUpperCase() 把字符串转换为大写。

toLowerCase() 把字符串转换为小写。

toUpperCase() 把字符串转换为大写。

toSource() 代表对象的源代码。

toString() 返回字符串。

valueOf() 返回某个字符串对象的原始值。

---------------------------------------------------------------

String 对象的属性

属性 描述

constructor 对创建该对象的函数的引用

length 字符串的长度

prototype 允许您向对象添加属性和方法

Lua:

具备string对象,模拟问题不大。

3.2 Date(日期)对象

js:

方法 描述

Date() 返回当日的日期和时间

getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31)

getDay() 从 Date 对象返回一周中的某一天 (0 ~ 6)

getMonth() 从 Date 对象返回月份 (0 ~ 11)

getFullYear() 从 Date 对象以四位数字返回年份

getYear() 从 Date 对象以两位或四位数字返回年份

getHours() 返回 Date 对象的小时 (0 ~ 23)

getMinutes() 返回 Date 对象的分钟 (0 ~ 59)

getSeconds() 返回 Date 对象的秒数 (0 ~ 59))

getMilliseconds() 返回 Date 对象的毫秒(0 ~ 999)

getTime() 返回 1970 年 1 月 1 日至今的毫秒数

getTimezoneOffset() 返回本地时间与格林威治标准时间的分钟差 (GMT)

getUTCDate() 根据世界时从 Date 对象返回月中的一天 (1 ~ 31)

getUTCDay() 根据世界时从 Date 对象返回周中的一天 (0 ~ 6)

getUTCMonth() 根据世界时从 Date 对象返回月份 (0 ~ 11)

getUTCFullYear() 根据世界时从 Date 对象返回四位数的年份

getUTCHours() 根据世界时返回 Date 对象的小时 (0 ~ 23)

getUTCMinutes() 根据世界时返回 Date 对象的分钟 (0 ~ 59)

getUTCSeconds() 根据世界时返回 Date 对象的秒钟 (0 ~ 59)

getUTCMilliseconds() 根据世界时返回 Date 对象的毫秒(0 ~ 999)

parse() 返回1970年1月1日午夜到指定日期(字符串)的毫秒数

setDate() 设置 Date 对象中月的某一天 (1 ~ 31))

setMonth() 设置 Date 对象中月份 (0 ~ 11))

setFullYear() 设置 Date 对象中的年份(四位数字)

setYear() 设置 Date 对象中的年份(两位或四位数字)

setHours() 设置 Date 对象中的小时 (0 ~ 23)

setMinutes() 设置 Date 对象中的分钟 (0 ~ 59)

setSeconds() 设置 Date 对象中的秒钟 (0 ~ 59)

setMilliseconds() 设置 Date 对象中的毫秒 (0 ~ 999)

setTime() 通过向或从1970年1月1日午夜添加或减去指定数目的毫秒来计算日期和时间

setUTCDate() 根据世界时设置 Date 对象中月份的一天 (1 ~ 31)

setUTCMonth() 根据世界时设置 Date 对象中的月份 (0 ~ 11)

setUTCFullYear() 根据世界时设置 Date 对象中年份(四位数字)

setUTCHours() 根据世界时设置 Date 对象中小时 (0 ~ 23)

setUTCMinutes() 根据世界时设置 Date 对象中分钟 (0 ~ 59)

setUTCSeconds() 根据世界时设置 Date 对象中秒钟 (0 ~ 59)

setUTCMilliseconds() 根据世界时设置 Date 对象中毫秒S(0 ~ 999)

toSource() 代表对象的源代码

toString() 把 Date 对象转换为字符串

toTimeString() 把 Date 对象的时间部分转换为字符串

toDateString() 把 Date 对象的日期部分转换为字符串

toGMTString() 根据格林威治时间,把 Date 对象转换为字符串

toUTCString() 根据世界时,把 Date 对象转换为字符串

toLocaleString() 根据本地时间格式,把 Date 对象转换为字符串

toLocaleTimeString() 根据本地时间格式,把 Date 对象的时间部分转换为字符串

toLocaleDateString() 根据本地时间格式,把 Date 对象的日期部分转换为字符串

UTC() 根据世界时,获得一个日期,然后返回1970年1月1日午夜到该日期的毫秒数

valueOf() 返回 Date 对象的原始值。

---------------------------------------------------------------

Date 对象的属性

属性 描述

constructor 一个对创建对象的函数的引用

prototype 使您有能力向对象添加属性和方法

----------------------------------------------

lua扩展实现这些接口,问题不大.

3.3 Array(数组)对象

js:

方法 描述

concat() 连接两个或更多的数组,并返回结果。

join() 把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。

pop() 删除并返回数组的最后一个元素

push() 向数组的末尾添加一个或更多元素,并返回新的长度

reverse() 颠倒数组中元素的顺序

shift() 删除并返回数组的第一个元素

slice() 从某个已有的数组返回选定的元素

sort() 对数组的元素进行排序

splice() 删除元素,并向数组添加新元素

toSource() 代表对象的源代码

toString() 把数组转换为字符串,并返回结果

toLocaleString() 把数组转换为本地数组,并返回结果

unshift() 向数组的开头添加一个或更多元素,并返回新的长度

valueOf() 返回数组对象的原始值

---------------------------------------------------------------

Array对象的属性

属性 描述

constructor 对创建此对象的函数的一个引用

index

input

length 设置或返回数组中元素的数目

prototype 使您有能力向对象添加属性和方法

___________________________________________________

lua:

lua的table可以轻易地模拟array对象,并实现其中的方法和属性。

3.4 Boolean(逻辑)对象

JS:

方法 描述

toSource() 代表对象的源代码

toString() 把逻辑值转换为字符串,并返回结果

valueOf() 返回 Boolean 对象的原始值

Boolean 对象的属性

属性 描述

constructor 对创建此对象的函数的一个引用

prototype 允许您向对象添加属性和方法

____________________________________________

lua:

本身就有bool属性的变量。

3.5 Math(算数)对象

Math(算数)对象的作用是:执行常见的算数任务。

方法 描述

abs(x) 返回数的绝对值

acos(x) 返回数的反余弦值

asin(x) 返回数的反正弦值

atan(x) 以介于 -PI/2 与 PI/2 弧度之间的数值来返回 x 的反正切值

atan2(y,x) 返回从 x 轴到点 (x,y) 的角度(介于 -PI/2 与 PI/2 弧度之间)

ceil(x) 对一个数进行上舍入

cos(x) 返回数的余弦

exp(x) 返回 e 的指数

floor(x) 对一个数进行下舍入

log(x) 返回数的自然对数(底为e)

max(x,y) 返回 x 和 y 中的最高值

min(x,y) 返回 x 和 y 中的最低值

pow(x,y) 返回 x 的 y 次幂

random() 返回 0 ~ 1 之间的随机数

round(x) 把一个数四舍五入为最接近的整数

sin(x) 返回数的正弦 1 2 3

sqrt(x) 返回数的平方根 1 2 3

tan(x) 返回一个角的正切 1 2 3

toSource() 代表对象的源代码 1 4 -

valueOf() 返回一个 Math 对象的原始值

---------------------------------------------------------------

Math 对象的属性

属性 描述

constructor 对创建此对象的函数的引用

E 常量 e, 自然对数的底数 (约等于2.718)

LN2 返回 2 的自然对数(约等于0.693)

LN10 返回 10 的自然对数(约等于2.302)

LOG2E 返回以 2 为底的 e 的对数 (约等于 1.414)

LOG10E 返回以 10 为底的 e 的对数 (约等于0.434)

PI 返回圆周率 (约等于3.14159)

prototype 允许您向对象添加属性和方法

SQRT1_2 返回 2 的平方根除 1 (约等于 0.707)

SQRT2 返回 2 的平方根 (约等于 1.414)

---------------------------------------------------------------

lua:

lua的数学库可以扩展实现相应的功能,这个不成问题。

3.6 RegExp 对象

RegExp对象用于规定在文本中检索的内容。

什么是 RegExp?

RegExp 是正则表达式的缩写。

当您检索某个文本时,可以使用一种模式来描述要检索的内容。RegExp 就是这种模式。

简单的模式可以是一个单独的字符。

更复杂的模式包括了更多的字符,并可用于解析、格式检查、替换等等。

您可以规定字符串中的检索位置,以及要检索的字符类型,等等

js:

RegExp 对象有 3 个方法:test()、exec() 以及 compile()。

lua:

本身支持正则表达式,不需要模拟这些对象和功能函数。

3.7 HTML DOM 对象

HTML DOM

HTML DOM 是 W3C 标准(是 HTML 文档对象模型的英文缩写,Document Object Model for HTML)。

HTML DOM 定义了用于 HTML 的一系列标准的对象,以及访问和处理 HTML 文档的标准方法。

通过 DOM,可以访问所有的 HTML 元素,连同它们所包含的文本和属性。

可以对其中的内容进行修改和删除,同时也可以创建新的元素。

HTML DOM 独立于平台和编程语言。它可被任何编程语言诸如 Java、JavaScript 和VBScript 使用。

以下的html对象均具备自身的属性或方法,需要一一实现,并针对其方法和属性与lua做绑定。

对象 描述

Document 代表整个 HTML 文档,用来访问页面中的所有元素。

Anchor 代表 <a> 元素。

Area 代表图像地图中的 <area> 元素。

Base 代表 <base> 元素。

Body 代表图像地图中的 <body> 元素。

Button 代表 <button> 元素。

Event 代表事件的状态

Form 代表 <form> 元素

Frame 代表 <frame> 元素

Frameset 代表 <frameset> 元素

Iframe 代表 <iframe> 元素

Image 代表 <img> 元素

Input button 代表 HTML 表单中的按钮

Input checkbox 代表 HTML 表单中的选择框

Input file 代表 HTML 表单中的 fileupload 。

Input hidden 代表 HTML 表单中的隐藏域。

Input password 代表 HTML 表单中的密码域。

Input radio 代表 HTML 表单中的单选框。

Input reset 代表 HTML 表单中的重置按钮。

Input submit 代表 HTML 表单中的确认按钮。

Input text 代表 HTML 表单中的文本输入域。

Link 代表 <link> 元素

Meta 代表 <meta> 元素

Object 代表一个 <Object> 元素

Option 代表 <option> 元素

Select 代表 HTML 表单中的选择列表。

Style 代表某个单独的样式声明。

Table 代表 <table> 元素。

TableData 代表 <td> 元素。

TableRow 代表 <tr> 元素。

Textarea 代表 <textarea> 元素。

各个元素只有对象属性,并没有方法,很容易模拟实现。

-----------------------------------------------------

Document 对象

每个载入浏览器的 HTML 文档都会成为 Document 对象。

Document 对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问。

-------------------------------------------------------------

Document 对象集合

集合 描述

all[] 提供对文档中所有 HTML 元素的访问

anchors[] 返回对文档中所有 Anchor 对象的引用

applets 返回对文档中所有 Applet 对象的引用

forms[] 返回对文档中所有 Form 对象引用

images[] 返回对文档中所有 Image 对象引用

links[] 返回对文档中所有 Area 和 Link 对象引用

-------------------------------------------------------------

Document 对象属性

属性 描述

body 提供对 <body> 元素的直接访问。

对于定义了框架集的文档,该属性引用最外层的 <frameset>

cookie 设置或返回与当前文档有关的所有 cookie

domain 返回当前文档的域名。 4 1 9 Yes

lastModified 返回文档被最后修改的日期和时间

referrer 返回载入当前文档的文档的 URL

title 返回当前文档的标题

URL 返回当前文档的 URL

-------------------------------------------------------------

Document 对象方法

方法 描述

close() 关闭用 document.open() 方法打开的输出流,并显示选定的数据

getElementById() 返回对拥有指定 id 的第一个对象的引用

getElementsByName() 返回带有指定名称的对象集合

getElementsByTagName() 返回带有指定标签名的对象集合

open() 打开一个流,以收集来自任何 document.write() 或

document.writeln() 方法的输出

write() 向文档写 HTML 表达式 或 JavaScript 代码

writeln() 等同于 write() 方法,不同的是在每个表达式之后写一个换行符

---------------------------------------------------------------------------------

Window 对象

Window 对象表示浏览器中打开的窗口。

如果文档包含框架(frame 或 iframe 标签),浏览器会为 HTML 文档创建一个

window 对象,并为每个框架创建一个额外的 window 对象。

Window 对象集合

集合 描述

frames[] 返回窗口中所有命名的框架。

该集合是 Window 对象的数组,每个 Window 对象在窗口中含有一个框架或

<iframe>。

属性 frames.length 存放数组 frames[] 中含有的元素个数。注意,frames[]

数组中

引用的框架可能还包括框架,它们自己也具有 frames[] 数组。

---------------------------------------------------------------------------------

Window 对象属性

属性 描述

closed 返回窗口是否已被关闭

defaultStatus 设置或返回窗口状态栏中的默认文本

document 对 Document 对象的只读引用。请参阅 Document 对象

history 对 History 对象的只读引用。请参数 History 对象

innerheight 返回窗口的文档显示区的高度

innerwidth 返回窗口的文档显示区的宽度

length 设置或返回窗口中的框架数量

location 用于窗口或框架的 Location 对象。请参阅 Location 对象

name 设置或返回窗口的名称

Navigator 对 Navigator 对象的只读引用。请参数 Navigator 对象

opener 返回对创建此窗口的窗口的引用

outerheight 返回窗口的外部高度

outerwidth 返回窗口的外部宽度

pageXOffset 设置或返回当前页面相对于窗口显示区左上角的 X 位置

pageYOffset 设置或返回当前页面相对于窗口显示区左上角的 Y 位置

parent 返回父窗口。 4 1 9

Screen 对 Screen 对象的只读引用。请参数 Screen 对象

self 返回对当前窗口的引用。等价于 Window 属性

status 设置窗口状态栏的文本

top 返回最顶层的先辈窗口

window window 属性等价于 self 属性,它包含了对窗口自身的引用

screenLeft

screenTop

screenX

screenY

只读整数。声明了窗口的左上角在屏幕上的的 x 坐标和 y 坐标。IE、Safari 和Opera 支持 screenLeft 和 screenTop,而 Firefox 和 Safari 支持 screenX 和screenY

---------------------------------------------------------------------------------

Window 对象方法

方法 描述

alert() 显示带有一段消息和一个确认按钮的警告框

blur() 把键盘焦点从顶层窗口移开

clearInterval() 取消由 setInterval() 设置的 timeout

clearTimeout() 取消由 setTimeout() 方法设置的 timeout

close() 关闭浏览器窗口

confirm() 显示带有一段消息以及确认按钮和取消按钮的对话框

createPopup() 创建一个 pop-up 窗口

focus() 把键盘焦点给予一个窗口

moveBy() 可相对窗口的当前坐标把它移动指定的像素

moveTo() 把窗口的左上角移动到一个指定的坐标

open() 打开一个新的浏览器窗口或查找一个已命名的窗口

print() 打印当前窗口的内容

prompt() 显示可提示用户输入的对话框

resizeBy() 按照指定的像素调整窗口的大小

resizeTo() 把窗口的大小调整到指定的宽度和高度

scrollBy() 按照指定的像素值来滚动内容

scrollTo() 把内容滚动到指定的坐标

setInterval() 按照指定的周期(以毫秒计)来调用函数或计算表达式

setTimeout() 在指定的毫秒数后调用函数或计算表达式

3.8(浏览器检测)Navigator

JS:

Navigator 对象

JavaScript Navigator 对象包含了有关访问者浏览器的所有信息。接下来我们学习

Navigator 对象的两个属性。

appName

保存浏览器类型

appVersion

存有浏览器的版本信息(其他信息中的一项)

3.9Cookies

什么是cookie?

cookie

是存储于访问者的计算机中的变量。每当同一台计算机通过浏览器请求某个页面时,就会发送这个cookie。你可以使用 JavaScript 来创建和取回 cookie 的值。

有关cookie的例子:

名字 cookie

当访问者首次访问页面时,他或她也许会填写他/她们的名字。名字会存储于 cookie中。当访问者再次访问网站时,

他们会收到类似 "Welcome John Doe!" 的欢迎词。而名字则是从 cookie 中取回的。

密码 cookie

当访问者首次访问页面时,他或她也许会填写他/她们的密码。密码也可被存储于cookie 中。

当他们再次访问网站时,密码就会从 cookie 中取回。

日期 cookie

当访问者首次访问你的网站时,当前的日期可存储于 cookie中。当他们再次访问网站时,他们会收到类似这样的一条消息:"Your last visit was on Tuesday August 11, 2005!"。日期也是从cookie 中取回的。

document.cookie 对象实际上是个字符串,用lua可以模拟。

3.10 表单验证

可用来在数据被送往服务器前对 HTML 表单中的这些输入数据进行验证。

JavaScript 表单验证

JavaScript 可用来在数据被送往服务器前对 HTML 表单中的这些输入数据进行验证。

被 JavaScript 验证的这些典型的表单数据有:

用户是否已填写表单中的必填项目?

用户输入的邮件地址是否合法?

用户是否已输入合法的日期?

用户是否在数据域 (numeric field) 中输入了文本?

这个只是业务逻辑,lua完全可以实现。

3.11 动画

使用 JavaScript 创建动态图像是可行的。

窍门是:使用 JavaScript 通过不同的事件来切换不同的图像。

在下面的例子中,我们要制作一个充当链接按钮的图像。我们将使用 onMouseOver事件和 onMouseOut 事件来驱动 JavaScript 函数切换图像。

这个只是业务逻辑,lua完全可以实现。

3.12图像地图

JavaScript 图像地图

我们已经从 HTML

教程中了解到,图像地图是带有可点击区域的图像。通常情况下,每个区域是一个相关的超级链接。单击某个区域,就回到达相关的链接。

业务逻辑:

添加 JavaScript

我们可向图像地图内部的 <area> 标签添加(能调用JavaScript的)事件。

<area> 标签支持以下事件:onClick、onDblClick、onMouseDown、onMouseUp、onMouseOver、onMouseMove、onMouseOut、onKeyPress、onKeyDown、onKeyUp、onFocus和onBlur。

lua均可以模拟。

3.13 计时

JS:

通过使用

JavaScript,我们有能力做到在一个设定的时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。

JavaScript 计时事件

通过使用

JavaScript,我们有能力作到在一个设定的时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。

在 JavaScritp 中使用计时事件是很容易的,两个关键方法是:

setTimeout() 未来的某时执行代码

clearTimeout() 取消setTimeout()

-------------------------------------------

Lua:timer事件来模拟,目前已实现。只需要完成这个两接口的封装。

下面转自stackoverflow回答:

Some more differences:

  • Lua has native support for coroutines.
  • Lua doesn't convert between types for any comparison operators. In JS, only '===' and '!==' don't type juggle.
  • Lua has an exponentiation operator (^); JS doesn't. JS has many more operators, including the ternary conditional operator (?:), increment/decrement, bitwise operators, type operators (typeof and instanceof), additional assignment operators and additional comparison operators.
  • In JS, the equals and not equals operators are of lower precedence than less than et al. In Lua, all comparison operators are the same precedence.
  • Lua supports tail calls.
  • Lua supports assignment to a list of variables. While it isn't yet standard in Javascript, Mozilla's JS engine (and Opera's, to an extent) has supported a similar feature since JS 1.7 (available as part of Firefox 2) under the name "destructuring assignment". Destructuring in JS is more general, as it can be used in contexts other than assignment, such as function definitions & calls and loop initializers.Destructuring assignment has been a proposed addition to ECMAScript (the language standard behind Javascript) for awhile.
  • In Lua, you can overload operators.
  • In Lua, you can manipulate environments with getfenv & setfenv.
  • In JS, all functions are variadic. In Lua, functions must be explicitly declared as variadic.
  • Foreach in JS loops over object properties. Foreach in Lua (which use the keyword for) loops over iterators and is more general.
  • JS has global and function scope. Lua has global and block scope. Control structures (e.g. if, for, while) introduce new blocks.

    • Due to differences in scoping rules, a closure's referencing of an outer variable (called "upvalues" in Lua parlance) may be handled differently in Lua and in Javascript. This is most commonly experienced with closures in for loops, and catches some people by surprise. In Javascript, the body of a for loop doesn't introduce a new scope, so any functions declared in the loop body all reference the same outer variables. In Lua, each iteration of the for loop creates new local variables for each loop variable.

      local i='foo'
      for i=1,10 do
        -- "i" here is not the local "i" declared above
        ...
      end
      print(i) -- prints 'foo'
      

      The above code is equivalent to:

      local i='foo'
      do
        local _i=1
        while _i<10 do
          local i=_i
          ...
          _i=_i+1
        end
      end
      print(i)
      

      As a consequence, functions defined in separate iterations have different upvalues for each referenced loop variable. See also Nicolas Bola's answers to Implementation of closures in Lua? and "What are the correct semantics of a closure over a loop variable?", and "The Semantics of the Generic for".

  • Integer literals in JS can be in octal.
  • JS has explicit Unicode support.
  • In lua, ~ is used in place of !. (as in, if foo ~= 20 then ... end) (technically syntax, but it's easily overlooked and causes subtle bugs).
  • In lua, the not/or/and keywords are used in place of !/||/&& (also syntax but also easily forgotten).
  • In Lua, any type of value (except nil and NaN) can be used to index a table; in JavaScript, object indexes are converted to strings.

更多参考:http://stackoverflow.com/questions/1022560/subtle-differences-between-javascript-and-lua