微信小程序WXS教程
介绍
WXS(WeiXin Script)是小程序的一套脚本语言,结合 WXML,可以构建出页面的结构。
WXS 与 JavaScript 是不同的语言,有自己的语法,并不和 JavaScript 一致。
WXS 代码可以编写在 wxml 文件中的 <wxs> 标签内,或以 .wxs 为后缀名的文件内。
模块
每一个 .wxs 文件和 <wxs> 标签都是一个单独的模块。
每个模块都有自己独立的作用域。即在一个模块里面定义的变量与函数,默认为私有的,对其他模块不可见。
一个模块要想对外暴露其内部的私有变量与函数,只能通过 module.exports 实现。
<wxs> 标签
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| module | String | 当前 <wxs> 标签的模块名。必填字段。 |
|
| src | String | 引用 .wxs 文件的相对路径。仅当本标签为单闭合标签或标签的内容为空时有效。 |
module 属性
module 属性是当前 <wxs> 标签的模块名。在单个 wxml 文件内,建议其值唯一。有重复模块名则按照先后顺序覆盖(后者覆盖前者)。不同文件之间的 wxs 模块名不会相互覆盖。
module 属性值的命名必须符合下面两个规则:
- 首字符必须是:字母(a-zA-Z),下划线(_)
- 剩余字符可以是:字母(a-zA-Z),下划线(_), 数字(0-9)
每个 wxs 模块均有一个内置的 module 对象。
属性
exports: 通过该属性,可以对外共享本模块的私有变量与函数。
示例:
1 | <!--pages/moduleTest/moduleTest.wxml--> |
页面输出:

上面例子声明了一个名字为 foo 的模块,将 some_msg 变量暴露出来,供当前页面使用。
src 属性
src 属性可以用来引用其他的 wxs 文件模块。
引用的时候,要注意如下几点:
- 只能引用
.wxs文件模块,且必须使用相对路径。 wxs模块均为单例,wxs模块在第一次被引用时,会自动初始化为单例对象。多个页面,多个地方,多次引用,使用的都是同一个wxs模块对象。- 如果一个
wxs模块在定义之后,一直没有被引用,则该模块不会被解析与运行。
示例代码:
在微信开发者工具里面,右键可以直接创建 .wxs 文件,在其中直接编写 WXS 脚本。
1 | // /pages/comm.wxs |
上述例子在 /pages/comm.wxs 的文件里面编写了 WXS 代码。该 .wxs 文件可以被其他的 .wxs 文件 或 WXML 中的 <wxs> 标签引用。
wxs标签通过src引入:
1 | <!--pages/moduleTest/moduleTest.wxml--> |
运行结果:

require函数
在.wxs模块中引用其他 wxs 文件模块,可以使用 require 函数。
引用的时候,要注意如下几点:
- 只能引用
.wxs文件模块,且必须使用相对路径。 wxs模块均为单例,wxs模块在第一次被引用时,会自动初始化为单例对象。多个页面,多个地方,多次引用,使用的都是同一个wxs模块对象。- 如果一个
wxs模块在定义之后,一直没有被引用,则该模块不会被解析与运行。
1 | // /pages/tools.wxs |
1 | // /pages/logic.wxs |
1 | <!--pages/moduleTest/moduleTest.wxml--> |
控制台输出:
1 | 'hello world' from tools.wxs |
注意事项
<wxs>模块只能在定义模块的 WXML 文件中被访问到。使用<include>或<import>时,<wxs>模块不会被引入到对应的 WXML 文件中。<template>标签中,只能使用定义该<template>的 WXML 文件中定义的<wxs>模块。
变量
概念
- WXS 中的变量均为值的引用。
- 没有声明的变量直接赋值使用,会被定义为全局变量。
- 如果只声明变量而不赋值,则默认值为
undefined。 - var表现与javascript一致,会有变量提升。
1 | var foo = 1; |
上面代码,分别声明了 foo、 bar、 i 三个变量。然后,foo 赋值为数值 1 ,bar 赋值为字符串 "hello world"。
变量名
变量命名必须符合下面两个规则:
- 首字符必须是:字母(a-zA-Z),下划线(_)
- 剩余字符可以是:字母(a-zA-Z),下划线(_), 数字(0-9)
保留标识符
以下标识符不能作为变量名:
1 | delete |
注释
WXS 主要有 3 种注释的方法。
示例代码:
1 | <!-- wxml --> |
上述例子中,所有 WXS 代码均被注释掉了。
方法三 和 方法二 的唯一区别是,没有
*/结束符。
运算符
基本运算符
示例代码:
1 | var a = 10, b = 20; |
- 加法运算(
+)也可以用作字符串的拼接。
1 | var a = '.w' , b = 'xs'; |
一元运算符
示例代码:
1 | var a = 10, b = 20; |
位运算符
示例代码:
1 | var a = 10, b = 20; |
比较运算符
示例代码:
1 | var a = 10, b = 20; |
等值运算符
示例代码:
1 | var a = 10, b = 20; |
赋值运算符
示例代码:
1 | var a = 10; |
二元逻辑运算符
示例代码:
1 | var a = 10, b = 20; |
其他运算符
示例代码:
1 | var a = 10, b = 20; |
运算符优先级
| 优先级 | 运算符 | 说明 | 结合性 |
|---|---|---|---|
| 20 | ( … ) |
括号 | n/a |
| 19 | … . … |
成员访问 | 从左到右 |
… [ … ] |
成员访问 | 从左到右 | |
… ( … ) |
函数调用 | 从左到右 | |
| 17 | … ++ |
后置递增 | n/a |
… -- |
后置递减 | n/a | |
| 16 | ! … |
逻辑非 | 从右到左 |
~ … |
按位非 | 从右到左 | |
+ … |
一元加法 | 从右到左 | |
- … |
一元减法 | 从右到左 | |
++ … |
前置递增 | 从右到左 | |
-- … |
前置递减 | 从右到左 | |
typeof … |
typeof | 从右到左 | |
void … |
void | 从右到左 | |
delete … |
delete | 从右到左 | |
| 14 | … * … |
乘法 | 从左到右 |
… / … |
除法 | 从左到右 | |
… % … |
取模 | 从左到右 | |
| 13 | … + … |
加法 | 从左到右 |
… - … |
减法 | 从左到右 | |
| 12 | … << … |
按位左移 | 从左到右 |
… >> … |
按位右移 | 从左到右 | |
… >>> … |
无符号右移 | 从左到右 | |
| 11 | … < … |
小于 | 从左到右 |
… <= … |
小于等于 | 从左到右 | |
… > … |
大于 | 从左到右 | |
… >= … |
大于等于 | 从左到右 | |
| 10 | … == … |
等号 | 从左到右 |
… != … |
非等号 | 从左到右 | |
… === … |
全等号 | 从左到右 | |
… !== … |
非全等号 | 从左到右 | |
| 9 | … & … |
按位与 | 从左到右 |
| 8 | … ^ … |
按位异或 | 从左到右 |
| 7 | … | … |
按位或 | 从左到右 |
| 6 | … && … |
逻辑与 | 从左到右 |
| 5 | … || … |
逻辑或 | 从左到右 |
| 4 | … ? … : … |
条件运算符 | 从右到左 |
| 3 | … = … |
赋值 | 从右到左 |
… += … |
赋值 | 从右到左 | |
… -= … |
赋值 | 从右到左 | |
… *= … |
赋值 | 从右到左 | |
… /= … |
赋值 | 从右到左 | |
… %= … |
赋值 | 从右到左 | |
… <<= … |
赋值 | 从右到左 | |
… >>= … |
赋值 | 从右到左 | |
… >>>= … |
赋值 | 从右到左 | |
… &= … |
赋值 | 从右到左 | |
… ^= … |
赋值 | 从右到左 | |
… |= … |
赋值 | 从右到左 | |
| 0 | … , … |
逗号 | 从左到右 |
语句
if 语句
在 WXS 中,可以使用以下格式的 if 语句 :
if (expression) statement: 当expression为 truthy 时,执行statement。if (expression) statement1 else statement2: 当expression为 truthy 时,执行statement1。 否则,执行statement2if ... else if ... else statementN通过该句型,可以在statement1~statementN之间选其中一个执行。
示例语法:
1 | // if ... |
switch 语句
示例语法:
1 | switch (表达式) { |
default分支可以省略不写。case关键词后面只能使用:变量,数字,字符串。
示例代码:
1 | var exp = 10; |
输出:
1 | number 10 |
for 语句
示例语法:
1 | for (语句; 语句; 语句) |
- 支持使用
break,continue关键词。
示例代码:
1 | for (var i = 0; i < 3; ++i) { |
输出:
1 | 0 |
while 语句
示例语法:
1 | while (表达式) |
- 当
表达式为 true 时,循环执行语句或代码块。 - 支持使用
break,continue关键词。
数据类型
WXS 语言目前共有以下几种数据类型:
number: 数值string:字符串boolean:布尔值object:对象function:函数array: 数组date:日期regexp:正则
number
语法
number 包括两种数值:整数,小数。
1 | var a = 10; |
属性
constructor:返回字符串"Number"。
方法
toStringtoLocaleStringvalueOftoFixedtoExponentialtoPrecision
以上方法的具体使用请参考
ES5标准。
string
语法
string 有两种写法:
1 | 'hello world'; |
属性
constructor:返回字符串"String"。length
除constructor外属性的具体含义请参考
ES5标准。
方法
toStringvalueOfcharAtcharCodeAtconcatindexOflastIndexOflocaleComparematchreplacesearchslicesplitsubstringtoLowerCasetoLocaleLowerCasetoUpperCasetoLocaleUpperCasetrim
以上方法的具体使用请参考
ES5标准。
boolean
语法
布尔值只有两个特定的值:true 和 false。
属性
constructor:返回字符串"Boolean"。
方法
toStringvalueOf
以上方法的具体使用请参考
ES5标准。
object
语法
object 是一种无序的键值对。使用方法如下所示:
1 | var o = {} //生成一个新的空对象 |
属性
constructor:返回字符串"Object"。
1 | console.log("Object" === {k:"1",v:"2"}.constructor) |
方法
toString:返回字符串"[object Object]"。
function
语法
function 支持以下的定义方式:
1 | //方法 1 |
function 同时也支持以下的语法(匿名函数,闭包等):
1 | var a = function (x) { |
arguments
function 里面可以使用 arguments 关键词。该关键词目前只支持以下的属性:
length: 传递给函数的参数个数。[index]: 通过index下标可以遍历传递给函数的每个参数。
示例代码:
1 | var a = function(){ |
属性
constructor:返回字符串"Function"。length:返回函数的形参个数。
方法
toString:返回字符串"[function Function]"。
示例代码:
1 | var func = function (a,b,c) { } |
array
语法
array 支持以下的定义方式:
1 | var a = []; //生成一个新的空数组 |
属性
constructor:返回字符串"Array"。length
除constructor外属性的具体含义请参考
ES5标准。
方法
toStringconcatjoinpoppushreverseshiftslicesortspliceunshiftindexOflastIndexOfeverysomeforEachmapfilterreducereduceRight
以上方法的具体使用请参考
ES5标准。
date
语法
生成 date 对象需要使用 getDate函数, 返回一个当前时间的对象。
1 | getDate() |
- 参数
milliseconds: 从1970年1月1日00:00:00 UTC开始计算的毫秒数datestring: 日期字符串,其格式为:”month day, year hours:minutes:seconds”
示例代码:
1 | var date = getDate(); //返回当前时间对象 |
属性
constructor:返回字符串 “Date”。
方法
toStringtoDateStringtoTimeStringtoLocaleStringtoLocaleDateStringtoLocaleTimeStringvalueOfgetTimegetFullYeargetUTCFullYeargetMonthgetUTCMonthgetDategetUTCDategetDaygetUTCDaygetHoursgetUTCHoursgetMinutesgetUTCMinutesgetSecondsgetUTCSecondsgetMillisecondsgetUTCMillisecondsgetTimezoneOffsetsetTimesetMillisecondssetUTCMillisecondssetSecondssetUTCSecondssetMinutessetUTCMinutessetHourssetUTCHourssetDatesetUTCDatesetMonthsetUTCMonthsetFullYearsetUTCFullYeartoUTCStringtoISOStringtoJSON
以上方法的具体使用请参考
ES5标准。
regexp
语法
生成 regexp 对象需要使用 getRegExp函数。
1 | getRegExp(pattern[, flags]) |
- 参数:
pattern: 正则表达式的内容。flags:修饰符。该字段只能包含以下字符:g: globali: ignoreCasem: multiline。
示例代码:
1 | var a = getRegExp("x", "img"); |
属性
constructor:返回字符串"RegExp"。sourceglobalignoreCasemultilinelastIndex
除constructor外属性的具体含义请参考
ES5标准。
方法
exectesttoString
以上方法的具体使用请参考
ES5标准。
数据类型判断
constructor 属性
数据类型的判断可以使用 constructor 属性。
示例代码:
1 | var number = 10; |
typeof
使用 typeof 也可以区分部分数据类型。
示例代码:
1 | var number = 10; |
基础类库
console
console.log 方法用于在 console 窗口输出信息。它可以接受多个参数,将它们的结果连接起来输出。
Math
属性
ELN10LN2LOG2ELOG10EPISQRT1_2SQRT2
以上属性的具体使用请参考
ES5标准。
方法
absacosasinatanatan2ceilcosexpfloorlogmaxminpowrandomroundsinsqrttan
以上方法的具体使用请参考
ES5标准。
JSON
方法
stringify(object): 将object对象转换为JSON字符串,并返回该字符串。parse(string): 将JSON字符串转化成对象,并返回该对象。
示例代码:
1 | console.log(undefined === JSON.stringify()); |
Number
属性
MAX_VALUEMIN_VALUENEGATIVE_INFINITYPOSITIVE_INFINITY
以上属性的具体使用请参考
ES5标准。
Date
属性
parseUTCnow
以上属性的具体使用请参考
ES5标准。
Global
属性
NaNInfinityundefined
以上属性的具体使用请参考
ES5标准。
方法
parseIntparseFloatisNaNisFinitedecodeURIdecodeURIComponentencodeURIencodeURIComponent
以上方法的具体使用请参考
ES5标准。
微信小程序WXS教程