Lua與javascript的差異


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" id="email" onchange="checkEmail()">

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. ifforwhile) 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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM