欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

微信小程序?qū)崙?zhàn)教程之WXS語(yǔ)法詳解

 更新時(shí)間:2024年09月06日 11:00:48   作者:柯曉楠  
WXS是小程序的一套腳本語(yǔ)言,結(jié)合 WXML,wxs類(lèi)似js和js又不一樣,好多js語(yǔ)法能在js使用不能在wxs使用可以構(gòu)建出頁(yè)面的結(jié)構(gòu),這篇文章主要給大家介紹了關(guān)于微信小程序?qū)崙?zhàn)教程之WXS語(yǔ)法詳解的相關(guān)資料,需要的朋友可以參考下

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á)式)

在使用whiledo-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)文章

  • javascript 不讓鼠標(biāo)事件觸發(fā)

    javascript 不讓鼠標(biāo)事件觸發(fā)

    div上加了onclick事件,里面又有超鏈a,點(diǎn)超鏈的時(shí)候能不觸發(fā)div 的事件嗎?
    2007-12-12
  • 原生js獲取元素樣式的簡(jiǎn)單方法

    原生js獲取元素樣式的簡(jiǎn)單方法

    下面小編就為大家?guī)?lái)一篇原生js獲取元素樣式的簡(jiǎn)單方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-08-08
  • JavaScript實(shí)現(xiàn)京東秒殺效果

    JavaScript實(shí)現(xiàn)京東秒殺效果

    這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)京東秒殺效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • js判斷當(dāng)頁(yè)面無(wú)法回退時(shí)關(guān)閉網(wǎng)頁(yè)否則就history.go(-1)

    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-08
  • JavaScript如何正確的寫(xiě)代碼注釋

    JavaScript如何正確的寫(xiě)代碼注釋

    這篇文章主要給大家介紹了關(guān)于JavaScript如何正確的寫(xiě)代碼注釋的相關(guān)資料,注釋的作用是提高代碼的可讀性,幫助自己和別人閱讀和理解你所編寫(xiě)的JavaScript代碼,注釋的內(nèi)容不會(huì)在網(wǎng)頁(yè)中顯示,需要的朋友可以參考下
    2023-10-10
  • js實(shí)現(xiàn)左右輪播圖

    js實(shí)現(xiàn)左右輪播圖

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)左右輪播圖,實(shí)現(xiàn)手動(dòng)和自動(dòng)兩種方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-01-01
  • Echarts圖表分析巴西隊(duì)歷年戰(zhàn)績(jī)實(shí)例詳解

    Echarts圖表分析巴西隊(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)于前后端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)航欄透明漸變效果

    原生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)題(推薦)

    本文給大家介紹使用javascript解決網(wǎng)頁(yè)圖片拉伸問(wèn)題,本文給大家介紹的非常詳細(xì),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧
    2016-11-11

最新評(píng)論