微信小程序?qū)崙?zhàn)教程之WXS語(yǔ)法詳解
WXS語(yǔ)法
WXS是微信小程序的一套腳本語(yǔ)言,其特性包括:模塊、變量、注釋、運(yùn)算符、語(yǔ)句、數(shù)據(jù)類(lèi)型、基礎(chǔ)類(lèi)庫(kù)等。在本章我們主要介紹WXS語(yǔ)言的特性與基本用法,以及 WXS 與 JavaScript 之間的不同之處。
1 WXS介紹
在微信小程序中,除了邏輯層使用的 JavaScript 腳本語(yǔ)言之外,微信小程序還有一套自己的腳本語(yǔ)言WXS(全稱 WeiXin Script)。在實(shí)際項(xiàng)目開(kāi)發(fā)中,WXS通常被用來(lái)做頁(yè)面數(shù)據(jù)的過(guò)濾或者是使用WXS進(jìn)行數(shù)據(jù)的計(jì)算處理,然后結(jié)合WXML組件,可以構(gòu)建小程序的頁(yè)面結(jié)構(gòu)。
在小程序頁(yè)面中,WXS 的用法有點(diǎn)類(lèi)似于HTML中的 <script>
標(biāo)簽,但是WXS與JavaScript又是兩種不同的腳本語(yǔ)言。WXS 有自己的語(yǔ)法,但在某些語(yǔ)法方面又和 JavaScript 及其相似,所以很容易讓開(kāi)發(fā)者誤以為 WXS 就是微信小程序中的 JavaScript 腳本。
2 基礎(chǔ)語(yǔ)法
2.1 WXS 模塊
WXS 模塊可以通過(guò) WXML 文件中的 <wxs>
標(biāo)簽進(jìn)行聲明,或者是在WXML文件內(nèi)引入 .wxs
后綴名的文件。每一個(gè) .wxs
后綴名的文件和 <wxs>
標(biāo)簽都是一個(gè)單獨(dú)的模塊,而且每個(gè)模塊都有自己獨(dú)立的作用域,開(kāi)發(fā)者在模塊中聲明的變量和函數(shù)都是私有的,其他模塊對(duì)該模塊內(nèi)的變量和函數(shù)是不可見(jiàn)的。如果要想把一個(gè)模塊中的私有變量和私有函數(shù)對(duì)外暴露,需要使用 module.exports
語(yǔ)句實(shí)現(xiàn)。
WXML文件提供的 <wxs>
標(biāo)簽上有兩個(gè)屬性,分別是module和src。其中,module屬性的值是字符串類(lèi)型的,用來(lái)表示當(dāng)前 <wxs>
標(biāo)簽的模塊名,該屬性是一個(gè)必填字段,在其他模塊中也是通過(guò)模塊名稱來(lái)引入該模塊中的私有屬性與函數(shù)的。在單獨(dú)是 WXML 文件中,<wxs>
的module屬性值都是唯一的,如果有重復(fù)模塊名稱,則按照定義的先后順序進(jìn)行引用,即后者會(huì)覆蓋前者。在不同文件之間的WXS模塊名不會(huì)相互覆蓋,互不影響。
<wxs>
標(biāo)簽的module屬性值的命名必須遵守以下兩個(gè)規(guī)范:
- 模塊名稱只能由大小寫(xiě)字母、數(shù)字、下劃線組成;
- 模塊名的首字符必須為大小寫(xiě)字母或下劃線,不能為數(shù)字。
module屬性值就是當(dāng)前模塊的模塊名稱,其命名規(guī)范和常見(jiàn)的編程語(yǔ)言中標(biāo)識(shí)符命名規(guī)則相似。在WXML文件中直接使用 <wxs>
標(biāo)簽定義module模塊的代碼如例1所示。
【例1】定義wxs模塊
<!-- index.wxml --> <wxs module="data"> var str = "hello world"; module.exports = { msg: str } </wxs> <view>data模塊的值:{{ data.msg }}</view>
上面代碼運(yùn)行后的效果如圖1所示。
圖1 wxs模塊輸出效果
在例1中聲明了一個(gè)名字為data的模塊,將模塊中str字符串變量復(fù)制給data模塊中的msg屬性,并向外暴露,在當(dāng)前頁(yè)面可以使用data.msg
獲取模塊中定義的值。
<wxs>
標(biāo)簽上還有另外一個(gè)src屬性,值也是字符串類(lèi)型,用于表示引入的.wxs
文件的相對(duì)路徑,只有在當(dāng)前的<wxs>
標(biāo)簽為單閉合標(biāo)簽或者標(biāo)簽的內(nèi)容為空時(shí)有效。使用src屬性引入其他.wxs
文件時(shí),需要注意以下幾點(diǎn):
- 只用引入
.wxs
文件模塊,且必須使用相對(duì)路徑; - WXS模塊均為單例,當(dāng)WXS模塊在第一次被引用時(shí),會(huì)自動(dòng)初始化為單例對(duì)象;如果在多個(gè)頁(yè)面或多個(gè)地方被多次引用時(shí),使用的都是同一個(gè)WXS模塊對(duì)象;
- 如果一個(gè)WXS模塊在定義后一直沒(méi)有被引用,則該模塊不會(huì)被解析執(zhí)行。
在微信開(kāi)發(fā)者工具中的index頁(yè)面文件夾上點(diǎn)擊鼠標(biāo)右鍵,選擇“新建文件”,效果如圖2所示。
圖2 選擇新建文件
將新建文件命名為tool.wxs
,該文件就是一個(gè)獨(dú)立的WXS模塊文件,在文件中可以直接編寫(xiě)WXS腳本,其代碼如例2所示。
【例2】WXS腳本文件代碼
// tool.wxs var str = "hello world from tool.wxs"; var sum = function(a,b) { return a+b } module.exports = { msg: str, sum: sum }
上面例子中的.wxs
文件可以被其他的WXML文件或.wxs
文件引用,如果在WXML文件中引用,其代碼如例3所示。
【例3】WXML中引入.wxs
文件
<!-- index.wxs --> <wxs src="./tool.wxs" module="data" /> <view>data模塊的值:{{ data.msg }}</view> <view>求和:1 + 2 = {{ data.sum(1,2) }}</view>
上面代碼運(yùn)行后的效果如圖3所示。
圖3 WXML中引入.wxs
文件運(yùn)行效果
.wxs
文件還可以被其他的.wxs
文件引用,引用時(shí)需要使用require函數(shù)。在引用.wxs
文件時(shí),需要注意以下幾點(diǎn):
- 只能引用
.wxs
文件模塊,且必須使用相對(duì)路徑; - wxs 模塊均為單例,wxs 模塊在第一次被引用時(shí),會(huì)自動(dòng)初始化為單例對(duì)象;多個(gè)頁(yè)面,多個(gè)地方,多次引用,使用的都是同一個(gè) wxs 模塊對(duì)象;
- 如果一個(gè) wxs 模塊在定義之后,一直沒(méi)有被引用,則該模塊不會(huì)被解析與運(yùn)行。
.wxs
文件引入其他WXS模塊代碼如例4所示。
【例4】
// tools.wxs var foo = "'hello world' from tools.wxs"; var bar = function (d) { return d; } module.exports = { FOO: foo, bar: bar, }; module.exports.msg = "some msg"; // logic.wxs var tools = require("./tools.wxs"); console.log(tools.FOO); console.log(tools.bar("logic.wxs")); console.log(tools.msg);
<!-- /page/index/index.wxml --> <wxs src="./../logic.wxs" module="logic" />
上面代碼運(yùn)行后,控制臺(tái)輸出效果如下:
'hello world' from tools.wxs
logic.wxs
some msg
在使用WXS模塊時(shí)需要注意以下幾點(diǎn):
<wxs>
模塊只能在定義模塊的 WXML 文件中被訪問(wèn)到。使用<include>
或<import>
時(shí),<wxs>
模塊不會(huì)被引入到對(duì)應(yīng)的 WXML 文件中;<template>
標(biāo)簽中,只能使用定義該<template>
的 WXML 文件中定義的<wxs>
模塊。
2.2 變量
WXS腳本的語(yǔ)法與JavaScript語(yǔ)法非常相似,但是二者又有著自己獨(dú)特的語(yǔ)法規(guī)則,例如在WXS腳本中聲明變量,必須使用 var 語(yǔ)句,不能使用const、let這些語(yǔ)句,這點(diǎn)和JavaScript是不同的。WXS中的變量均為值的引用,沒(méi)有聲明的變量直接賦值使用,會(huì)被定義為全局變量。如果只聲明變量而不賦值的話,該變量會(huì)被默認(rèn)賦值為undefined。WXS腳本聲明變量的示例代碼如例5所示。
【例5】WXS腳本聲明變量
var foo = 1; var bar = "hello world"; var i; // i === undefined
上面代碼,分別聲明了 foo、 bar、 i 三個(gè)變量。然后,foo 賦值為數(shù)值 1 ,bar 賦值為字符串 “hello world”。
在WXS腳本中的變量名可以稱為是標(biāo)識(shí)符,變量命名時(shí)需要遵循以下規(guī)則:
- 變量名只能由大小寫(xiě)英文字母、數(shù)字、下劃線組成;
- 首字符必須是大小寫(xiě)英文字母或下劃線,不能為數(shù)字;
- 變量名不能使用WXS腳本保留的關(guān)鍵字。
WXS腳本保留的關(guān)鍵字為:delete、void、typeof、null、undefined、NaN、Infinity、var、if、else、true、false、require、this、function、arguments、return、for、while、do、break、continue、switch、case、default等25個(gè)標(biāo)識(shí)符。
2.3 注釋
WXS腳本中的注釋與JavaScript中的注釋一樣,有兩種常見(jiàn)的注釋方法,分別是單行注釋和多行注釋。注釋代碼如例6所示。
【例6】WXS腳本注釋
<wxs module="sample"> // 方法一:?jiǎn)涡凶⑨? /* 方法二:多行注釋 */ </wxs>
WXS腳本中還有一種獨(dú)特的注釋方法,即結(jié)尾注釋。直接在要注釋的代碼前面使用 /* 的方式將代碼注釋?zhuān)瑥?/* 開(kāi)始往后所有的WXS代碼都會(huì)被注釋?zhuān)浯a如例7所示。
【例7】結(jié)尾注釋
<wxs module="sample"> /* 方法三:結(jié)尾注釋。即從 /* 開(kāi)始往后的所有 WXS 代碼均被注釋 var a = 1; var b = 2; var c = "fake"; </wxs>
在上面的例子中,所有的WXS代碼均被注釋掉了。
2.4 運(yùn)算符
運(yùn)算符用于執(zhí)行程序代碼運(yùn)算,會(huì)針對(duì)一個(gè)以上操作數(shù)項(xiàng)目來(lái)進(jìn)行運(yùn)算。WXS腳本中的運(yùn)算符可以分為基本運(yùn)算符、一元運(yùn)算符、位運(yùn)算符、比較運(yùn)算符、等值運(yùn)算符、賦值運(yùn)算符、二元邏輯運(yùn)算符等7種。
基本運(yùn)算符主要用于四則運(yùn)算,代碼如例8所示。
【8】基本運(yùn)算符
var a = 10, b = 20; // 加法運(yùn)算 console.log(30 === a + b); // 減法運(yùn)算 console.log(-10 === a - b); // 乘法運(yùn)算 console.log(200 === a * b); // 除法運(yùn)算 console.log(0.5 === a / b); // 取余運(yùn)算 console.log(10 === a % b);
一元運(yùn)算符主要用于變量的自增、自減等簡(jiǎn)單運(yùn)算,代碼如例9所示。
【例9】一元運(yùn)算符
var a = 10, b = 20; // 自增運(yùn)算 console.log(10 === a++); console.log(12 === ++a); // 自減運(yùn)算 console.log(12 === a--); console.log(10 === --a); // 正值運(yùn)算 console.log(10 === +a); // 負(fù)值運(yùn)算 console.log(0-10 === -a); // 否運(yùn)算 console.log(-11 === ~a); // 取反運(yùn)算 console.log(false === !a); // delete 運(yùn)算 console.log(true === delete a.fake); // void 運(yùn)算 console.log(undefined === void a); // typeof 運(yùn)算 console.log("number" === typeof a);
WXS腳本中也可以使用二進(jìn)制的位運(yùn)算,代碼如例10所示。
【例10】位運(yùn)算符
var a = 10, b = 20; // 左移運(yùn)算 console.log(80 === (a << 3)); // 帶符號(hào)右移運(yùn)算 console.log(2 === (a >> 2)); // 無(wú)符號(hào)右移運(yùn)算 console.log(2 === (a >>> 2)); // 與運(yùn)算 console.log(2 === (a & 3)); // 異或運(yùn)算 console.log(9 === (a ^ 3)); // 或運(yùn)算 console.log(11 === (a | 3));
比較運(yùn)算也是常見(jiàn)的邏輯運(yùn)算中的一種,代碼如例11所示。
【例11】比較運(yùn)算符
var a = 10, b = 20; // 小于 console.log(true === (a < b)); // 大于 console.log(false === (a > b)); // 小于等于 console.log(true === (a <= b)); // 大于等于 console.log(false === (a >= b));
等值運(yùn)算符主要是判斷兩個(gè)變量的值是否相等,代碼如例12所示。
【例12】等值運(yùn)算符
var a = 10, b = 20; // 等號(hào) console.log(false === (a == b)); // 非等號(hào) console.log(true === (a != b)); // 全等號(hào) console.log(false === (a === b)); // 非全等號(hào) console.log(true === (a !== b));
賦值運(yùn)算符也是最常見(jiàn)的一種運(yùn)算符,用于為變量賦值,代碼如例13所示。
【例13】賦值運(yùn)算符
var a = 10; a = 10; a *= 10; console.log(100 === a); a = 10; a /= 5; console.log(2 === a); a = 10; a %= 7; console.log(3 === a); a = 10; a += 5; console.log(15 === a); a = 10; a -= 11; console.log(-1 === a); a = 10; a <<= 10; console.log(10240 === a); a = 10; a >>= 2; console.log(2 === a); a = 10; a >>>= 2; console.log(2 === a); a = 10; a &= 3; console.log(2 === a); a = 10; a ^= 3; console.log(9 === a);
二元邏輯運(yùn)算符就是用于邏輯與、邏輯或的運(yùn)算符,代碼如例14所示。
【例14】二元邏輯運(yùn)算符
var a = 10, b = 20; // 邏輯與 console.log(20 === (a && b)); // 邏輯或 console.log(10 === (a || b));
在WXS腳本中的運(yùn)算符之間存在優(yōu)先級(jí)關(guān)系,運(yùn)算符的優(yōu)先級(jí)決定了表達(dá)式中運(yùn)算執(zhí)行的先后順序。優(yōu)先級(jí)從上到下依次遞減,最上面具有最高的優(yōu)先級(jí),逗號(hào)操作符具有最低的優(yōu)先級(jí)。表達(dá)式的結(jié)合次序取決于表達(dá)式中各種運(yùn)算符的優(yōu)先級(jí)。優(yōu)先級(jí)高的運(yùn)算符先結(jié)合,優(yōu)先級(jí)低的運(yùn)算符后結(jié)合,同一行中的運(yùn)算符的優(yōu)先級(jí)相同。在WXS腳本中,括號(hào)“()”的優(yōu)先級(jí)最高,逗號(hào)“,”的優(yōu)先級(jí)最低。
2.5 語(yǔ)句
WXS腳本中主要包含了兩類(lèi)語(yǔ)句,一類(lèi)是分支語(yǔ)句,包括if語(yǔ)句、switch語(yǔ)句;另一類(lèi)是循環(huán)語(yǔ)句,包括for語(yǔ)句、while語(yǔ)句。
在WXS腳本中if的用法如例15所示。
【例15】if語(yǔ)句
if (表達(dá)式) { // 代碼塊 } else if (表達(dá)式) { // 代碼塊 } else { // 代碼塊 }
當(dāng)大括號(hào)中的代碼只有一行時(shí),大括號(hào)“{}”可以省略,效果如例16所示。
【例16】if語(yǔ)句的簡(jiǎn)寫(xiě)方式
if (表達(dá)式) 語(yǔ)句; else 語(yǔ)句; // 或者是 if (表達(dá)式) 語(yǔ)句; else 語(yǔ)句;
switch語(yǔ)句需要用到case關(guān)鍵字進(jìn)行分支,case關(guān)鍵字后面只能使用變量、數(shù)字、字符串,最后都不滿足的條件使用default關(guān)鍵字分支。switch語(yǔ)句的語(yǔ)法如例17所示。
【例17】switch語(yǔ)法
switch (表達(dá)式) { case 變量: 語(yǔ)句; case 數(shù)字: 語(yǔ)句; break; case 字符串: 語(yǔ)句; default: 語(yǔ)句; }
switch語(yǔ)句的用法與if不同,但是都可以用于分支,其最終執(zhí)行的結(jié)果是類(lèi)似的。if語(yǔ)句的條件是表達(dá)式,而switch語(yǔ)句的條件是滿足表達(dá)式的值。switch語(yǔ)句的示例代碼如例18所示。
【例18】switch示例
var week = 1; switch (week) { case 1: console.log("周一"); break; case 2: console.log("周二"); break; case 3: console.log("周三"); break; case 4: console.log("周四"); break; case 5: console.log("周五"); break; case 6: console.log("周六"); break; case 7: console.log("周日"); break; default: console.log("請(qǐng)輸入正確的周數(shù)"); }
上面示例代碼運(yùn)行后,在控制臺(tái)輸出結(jié)果如下:
周一
如果有過(guò)JavaScript語(yǔ)言或其他編程語(yǔ)言的學(xué)習(xí)經(jīng)歷的話,肯定對(duì)循環(huán)并不陌生,特別是for循環(huán)。WXS腳本的for循環(huán)語(yǔ)法與JavaScript語(yǔ)言的for循環(huán)語(yǔ)法是一樣的,具體代碼如例19所示。
【例19】for循環(huán)語(yǔ)法
for (語(yǔ)句; 語(yǔ)句; 語(yǔ)句) 語(yǔ)句; // 或者是 for (語(yǔ)句; 語(yǔ)句; 語(yǔ)句) { 代碼塊; }
for循環(huán)的示例代碼如例20所示。
【例20】for循環(huán)示例
for (var i = 0; i < 3; ++i) { console.log(i); if( i >= 1) break; }
上面示例代碼運(yùn)行后,在控制臺(tái)輸出的結(jié)果如下:
0
1
while也是用于循環(huán)的語(yǔ)句,當(dāng)表達(dá)式的值為true時(shí),循環(huán)執(zhí)行語(yǔ)句或代碼塊,在代碼塊中也支持break、continue關(guān)鍵詞來(lái)跳過(guò)循環(huán),其語(yǔ)法代碼如例21所示。
【例21】while語(yǔ)句語(yǔ)法
while (表達(dá)式) 語(yǔ)句; // 或者是 while (表達(dá)式){ 代碼塊; }
我們還可以使用do-while
語(yǔ)句來(lái)執(zhí)行循環(huán),其語(yǔ)法如例22所示。
do { 代碼塊; } while (表達(dá)式)
在使用while
或do-while
語(yǔ)句執(zhí)行循環(huán)的代碼時(shí),一定要注意在合適的時(shí)機(jī)設(shè)置表達(dá)式的值為false,或者是合理設(shè)置跳出循環(huán),否則將會(huì)出現(xiàn)死循環(huán)的情況。如果實(shí)際開(kāi)發(fā)需求中需要使用到無(wú)限循環(huán),可以不做跳出循環(huán)的操作。
3 數(shù)據(jù)類(lèi)型
WXS腳本語(yǔ)言中的變量可以保存多種數(shù)據(jù)類(lèi)型,包括數(shù)值、字符串、布爾值、對(duì)象、函數(shù)、數(shù)組等。WXS腳本語(yǔ)言中的數(shù)據(jù)類(lèi)型分為基本數(shù)據(jù)類(lèi)型和引用數(shù)據(jù)類(lèi)型,基本數(shù)據(jù)類(lèi)型是指簡(jiǎn)單的數(shù)據(jù)段,引用數(shù)據(jù)類(lèi)型是指有多個(gè)值構(gòu)成的對(duì)象。當(dāng)我們把一個(gè)值賦值給一個(gè)變量時(shí),解析器首先要確認(rèn)這個(gè)值是基本數(shù)據(jù)類(lèi)型還是引用數(shù)據(jù)類(lèi)型,以此來(lái)判斷該值存儲(chǔ)的內(nèi)存位置與大小。
3.1 基本數(shù)據(jù)類(lèi)型
在WXS腳本語(yǔ)言中,基本數(shù)據(jù)類(lèi)型包括number(數(shù)值)、string(字符串)、boolean(布爾值)等。
number包括兩種數(shù)值,分別是整數(shù)和小數(shù),示例如下:
var a = 10; var PI = 3.141592653589793;
number也可以作為對(duì)象類(lèi)型,其方法可以參考ECMAScript5標(biāo)準(zhǔn),常見(jiàn)的方法有:
- toString()
- toLocaleString()
- valueOf()
- toFixed()
- toExponential()
- toPrecision()
WXS的其他幾種基本數(shù)據(jù)類(lèi)型的屬性與方法都可以參考ES5標(biāo)準(zhǔn)。其中,string字符串的值可以使用單引號(hào)和雙引號(hào)兩種寫(xiě)法,boolean類(lèi)型只有兩個(gè)特定的值,分別是true和false。
3.2 引用數(shù)據(jù)類(lèi)型
WXS腳本語(yǔ)言中的引用數(shù)據(jù)類(lèi)型包括object(對(duì)象)、array(數(shù)組)、function(函數(shù))、date(日期)等,這些引用數(shù)據(jù)類(lèi)型與基本數(shù)據(jù)類(lèi)型不同的是,基本數(shù)據(jù)類(lèi)型是簡(jiǎn)單的數(shù)據(jù)段,被保存在棧內(nèi)存中,而引用數(shù)據(jù)類(lèi)型是有多個(gè)值構(gòu)成的對(duì)象,被保存在堆內(nèi)存中。
WXS腳本語(yǔ)言與其他語(yǔ)言不同的是,開(kāi)發(fā)者不可以直接訪問(wèn)堆內(nèi)存空間中的位置,也不能直接操作堆內(nèi)存空間,只能操作對(duì)象在棧內(nèi)存中的引用地址。所以,引用類(lèi)型的數(shù)據(jù)在棧內(nèi)存中保存的是對(duì)象在堆內(nèi)存中的引用地址,通過(guò)這個(gè)引用地址可以快速查找到保存在堆內(nèi)存中的對(duì)象。
(1)object對(duì)象
在WXS腳本中,object對(duì)象是一種無(wú)序的鍵值對(duì),如果想要定義一個(gè)object對(duì)象,可以使用以下方法:
// 生成一個(gè)新的空對(duì)象 var o = {} //生成一個(gè)新的非空對(duì)象 o = { str: '', i: 1, fn: function() {} };
調(diào)用對(duì)象中的屬性時(shí),可以使用“對(duì)象.屬性”的語(yǔ)法獲取對(duì)應(yīng)屬性的值,示例代碼如下:
// 讀取對(duì)象屬性 console.log(o.str)
(2)function函數(shù)
WXS腳本語(yǔ)言中有三種函數(shù)的用法,分別是普通函數(shù)、匿名函數(shù)和閉包函數(shù)。普通函數(shù)可以直接使用function關(guān)鍵字聲明,也可以將一個(gè)匿名函數(shù)賦值給某個(gè)變量,示例代碼如下:
// 普通函數(shù) function fn () {} // 或者是 var fn = function () {}
閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù),WXS腳本語(yǔ)言中也可以像JavaScript語(yǔ)言那樣使用閉包,示例代碼如例22所示。
【例22】閉包
var a = function (x) { return function () { return x; } } var b = a(100); console.log( 100 === b() ); // true
(3)array數(shù)組
array支持兩種定義數(shù)組的方式,一種是生成一個(gè)新的空數(shù)組,語(yǔ)法如下:
var a = [];
另一種是生成一個(gè)新的非空數(shù)組,數(shù)組中的元素可以是任意類(lèi)型,語(yǔ)法如下:
var a = [1,"a",{},function(){}];
array對(duì)象上也定義了一系列操作數(shù)組的方法,例如數(shù)組轉(zhuǎn)字符串的toString()
、追加元素的push()
、用于排序的sort()
等方法,關(guān)于array對(duì)象的具體方法可以參考ES5標(biāo)準(zhǔn)。
(4)date日期
在WXS腳本中,想要生成一個(gè)date日期類(lèi)型的對(duì)象,需要借助getDate()
方法,該方法用于返回當(dāng)前的日期對(duì)象。開(kāi)發(fā)者也可以使用getDate()
方法提供的多種重載方法,生成不同格式的日期對(duì)象,語(yǔ)法如下所示:
getDate() getDate(milliseconds) getDate(datestring) getDate(year, month[, date[, hours[, minutes[, seconds[, milliseconds]]]]])
在上面getDate()
重載方法的參數(shù)中,milliseconds是指從1970年1月1日零點(diǎn)開(kāi)始計(jì)算到指定日期時(shí)間之間的毫秒數(shù);datestring是指日期字符串,格式為:month day, year hours:minutes:seconds
。
3.3 正則表達(dá)式
正則表達(dá)式(英文全稱 Regular Expression,簡(jiǎn)寫(xiě) regex、regexp或RE)是使用單個(gè)字符串來(lái)描述、匹配一系列符合某個(gè)句法規(guī)則的字符串搜索模式,可以用于文本搜索和文本替換等操作中。正則表達(dá)式不屬于某個(gè)編程語(yǔ)言,而是一種由一個(gè)字符序列形成的搜索模式。正則表達(dá)式可以是一個(gè)簡(jiǎn)單的字符,或者是一個(gè)更復(fù)雜的模式,當(dāng)開(kāi)發(fā)者在文本中搜索數(shù)據(jù)時(shí),可以用搜索模式來(lái)描述要查詢的內(nèi)容。
在WXS腳本中,生成正則表達(dá)式對(duì)象需要使用getRegExp()
方法,語(yǔ)法如下:
getRegExp(pattern[, flags])
getRegExp()
方法的參數(shù)pattern表示正則表達(dá)式的內(nèi)容;參數(shù)flags表示修飾符,該字段只能包含以下字符:
- g:表示global,執(zhí)行全局匹配(查找所有匹配而非在找到第一個(gè)匹配后停止)。
- i:表示ignoreCase,執(zhí)行對(duì)大小寫(xiě)不敏感的匹配。
- m:表示multiline,執(zhí)行多行匹配。
正則表達(dá)式的示例代碼如例23所示。
【例23】
var a = getRegExp("x", "img"); console.log("x" === a.source); // true console.log(true === a.global); // true console.log(true === a.ignoreCase); // true console.log(true === a.multiline); // true
3.4 數(shù)據(jù)類(lèi)型判斷
在WXS腳本中,可以借助每個(gè)對(duì)象的constructor屬性來(lái)判斷數(shù)據(jù)類(lèi)型,示例代碼如例24所示。
【例24】constructor屬性判斷數(shù)據(jù)類(lèi)型
var number = 10; console.log( "Number" === number.constructor ); // true var string = "str"; console.log( "String" === string.constructor ); // true var boolean = true; console.log( "Boolean" === boolean.constructor ); // true var object = {}; console.log( "Object" === object.constructor ); // true var func = function(){}; console.log( "Function" === func.constructor ); // true var array = []; console.log( "Array" === array.constructor ); // true var date = getDate(); console.log( "Date" === date.constructor ); // true var regexp = getRegExp(); console.log( "RegExp" === regexp.constructor ); // true
也可以使用typeof來(lái)區(qū)分部分?jǐn)?shù)據(jù)類(lèi)型,示例代碼如例25所示。
【例25】typeof區(qū)分?jǐn)?shù)據(jù)類(lèi)型
var number = 10; var boolean = true; var object = {}; var func = function(){}; var array = []; var date = getDate(); var regexp = getRegExp(); console.log( 'number' === typeof number ); // true console.log( 'boolean' === typeof boolean ); // true console.log( 'object' === typeof object ); // true console.log( 'function' === typeof func ); // true console.log( 'object' === typeof array ); // true console.log( 'object' === typeof date ); // true console.log( 'object' === typeof regexp ); // true console.log( 'undefined' === typeof undefined ); // true console.log( 'object' === typeof null ); // true
4 基礎(chǔ)類(lèi)庫(kù)
WXS的數(shù)據(jù)類(lèi)型一共有八種,這與JavaScript的六中數(shù)據(jù)類(lèi)型不太一致。在WXS腳本語(yǔ)言中,基本數(shù)據(jù)類(lèi)型包括number、string、boolean、object、array、function、date、regexp等八種。在WXS腳本中的八種數(shù)據(jù)類(lèi)型與JavaScript的數(shù)據(jù)類(lèi)型有所不同,例如生成date對(duì)象時(shí)需要使用getDate()
函數(shù),生成 regexp 對(duì)象需要使用 getRegExp函數(shù),這些對(duì)象都不能使用new關(guān)鍵字直接生成。WXS腳本基于這八種數(shù)據(jù)類(lèi)型,派生出六種基礎(chǔ)類(lèi)庫(kù),分別是console、Math、JSON、Number、Date和Global。
WXS腳本語(yǔ)言的基礎(chǔ)類(lèi)庫(kù)與JavaScript語(yǔ)言的ES5標(biāo)準(zhǔn)是基本是一樣的,區(qū)別在于WXS中的console基礎(chǔ)類(lèi)庫(kù)只提供了console.log()
函數(shù)。其他的基礎(chǔ)類(lèi)庫(kù)中對(duì)象的數(shù)據(jù)和函數(shù),可以參考ES5標(biāo)準(zhǔn)文檔。
5 本章小結(jié)
本章我們學(xué)習(xí)了WXS的一些語(yǔ)法特性,其實(shí)WXS語(yǔ)法和JavaScript的語(yǔ)法基本上是一致的,只是對(duì)JavaScript腳本語(yǔ)言的上層做了一些封裝和限制。二者相同的地方非常多,例如if-else、switch、for等用于分支和循環(huán)的常用語(yǔ)法,還包括一些基礎(chǔ)的類(lèi)庫(kù)。但是二者也有一些區(qū)別,例如在WXS模塊中不支持try-catch語(yǔ)句。WXS腳本可以方便開(kāi)發(fā)者在WXML中快速定義私有變量和函數(shù),在使用WXS語(yǔ)言時(shí)可以參考ES5標(biāo)準(zhǔn),但是還要注意WXS語(yǔ)法與JavaScript語(yǔ)法的區(qū)別。
到此這篇關(guān)于微信小程序?qū)崙?zhàn)教程之WXS語(yǔ)法詳解的文章就介紹到這了,更多相關(guān)微信小程序WXS語(yǔ)法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
js判斷當(dāng)頁(yè)面無(wú)法回退時(shí)關(guān)閉網(wǎng)頁(yè)否則就history.go(-1)
當(dāng)頁(yè)面沒(méi)有前驅(qū)歷史記錄時(shí),點(diǎn)擊返回按鈕時(shí)直接關(guān)閉頁(yè)面,否則就退回到前一頁(yè)2014-08-08Echarts圖表分析巴西隊(duì)歷年戰(zhàn)績(jī)實(shí)例詳解
這篇文章主要為大家介紹了Echarts圖表分析巴西隊(duì)歷年戰(zhàn)績(jī)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12關(guān)于前后端json數(shù)據(jù)的發(fā)送與接收詳解
這篇文章主要給大家介紹了關(guān)于前后端json數(shù)據(jù)發(fā)送與接收的相關(guān)資料,文中通過(guò)示例代碼詳細(xì)介紹了關(guān)于flask中的json數(shù)據(jù)接收和前端發(fā)送json數(shù)據(jù)等內(nèi)容,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-07-07原生JS實(shí)現(xiàn) MUI導(dǎo)航欄透明漸變效果
透明漸變導(dǎo)航是一種解決滾動(dòng)條通頂?shù)淖兺ǚ桨浮_@篇文章主要介紹了原生JS實(shí)現(xiàn) MUI導(dǎo)航欄透明漸變效果,需要的朋友可以參考下2017-11-11使用JavaScript解決網(wǎng)頁(yè)圖片拉伸問(wèn)題(推薦)
本文給大家介紹使用javascript解決網(wǎng)頁(yè)圖片拉伸問(wèn)題,本文給大家介紹的非常詳細(xì),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧2016-11-11