WXS(WeiXin Script)是小程序的一套腳本語言,結(jié)合 WXML,可以構(gòu)建出頁面的結(jié)構(gòu)。
1惭墓、WXS與JS的區(qū)別
1.1 WXS 的基礎(chǔ)類庫:
WXS 只提供給開發(fā)者5個基礎(chǔ)類庫,分別是 console而姐,Math腊凶,JSON,Number拴念,Date吭狡,以及一些常用的全局變量和全局函數(shù),可以通過文檔進(jìn)行查閱:https://developers.weixin.qq.com/miniprogram/dev/framework/view/wxs/07basiclibrary.html
這些 API 雖然數(shù)量不多丈莺,但已經(jīng)能滿足基本的數(shù)據(jù)操作要求划煮,而對于復(fù)雜的數(shù)據(jù)操作,比如類定義和繼承等缔俄,還是需要依靠邏輯層的 JS 腳本完成弛秋。
1.2 數(shù)組遍歷
WXS 里,遍歷數(shù)組只能通過for
實(shí)現(xiàn)俐载,而JS中的for in
和for of
不被支持蟹略,對于需要循環(huán)處理數(shù)據(jù)的場景,也可以通過數(shù)組的forEach
方法實(shí)現(xiàn)遍歷:
var ary = [0, 1, 2];
ary.forEach(function(i) {
console.log(i);
})
1.3 變量類型判斷
由于WXS先天不支持使用 Array 對象遏佣,因此我們平常用于判斷數(shù)組類型變量的語句[] instanceof Array
也就不能使用了挖炬,而typeof []
的輸出結(jié)果是 "object",并不能滿足實(shí)際的開發(fā)要求状婶。所幸我們還可以使用變量的 「constructor」 屬性進(jìn)行類型判斷:
[].constructor === Array //true
1.4 性能差異
如前所說意敛,小程序的架構(gòu)分成了邏輯層和視圖層馅巷,WXS 與 JavaScript 還有一個差異在于,它與 WXML 一同們于視圖層草姻,運(yùn)行于同一個線程內(nèi)钓猬,因此減少了跨線程通信的開銷。這也是我們之所以優(yōu)先采用 WXS 處理數(shù)據(jù)的原因之一撩独。
1.5 平臺差異
小程序在Android上敞曹,使用V8引擎解析和渲染 JavaScript; 而在iOS上,則是使用 JavaScriptCore综膀,這兩者在解析性能的表現(xiàn)上差異比較大澳迫,相對來說 V8 的性能比 JSC 要好得多,那么在 IOS 的小程序中剧劝,使用脫離 JavaScript 環(huán)境的 WXS橄登,就會使性能有更多的提升,這也是WXS文檔中提及 “在 iOS 設(shè)備上小程序內(nèi)的 wxs 會比 javascript 代碼快 2 ~ 20 倍” 的具體原因担平。