小程序wxs语法的使用「建议收藏」

小程序wxs语法的使用「建议收藏」一、WXS介绍•WXS(WeiXinScript)是小程序的一套脚本语言,结合WXML,可以构建出页面的结构。•WXS与JavaScript是不同的语言,有自己的语法,并不和JavaScript一致。•WXS的运行环境和其他JavaScript代码是隔离的,WXS中不能调用其他JavaScript文件中定义的函数,也不能调用小程序提供的API。二、WXS模块WXS代码可以编写在wxml文件中的<wxs>标签内,或以.wxs为后缀名的文件内。

大家好,欢迎来到IT知识分享网。

一、WXS介绍

• WXS(WeiXin Script)是小程序的一套脚本语言,结合 WXML,可以构建出页面的结构。
• WXS 与 JavaScript 是不同的语言,有自己的语法,并不和 JavaScript 一致。
• WXS 的运行环境和其他 JavaScript 代码是隔离的,WXS 中不能调用其他 JavaScript 文件中定义的函数,也不能调用小程序提供的API。

二、WXS模块

WXS 代码可以编写在 wxml 文件中的 <wxs> 标签内,或以 .wxs 为后缀名的文件内。每一个 .wxs 文件和 <wxs> 标签都是一个单独的模块。每个模块都有自己独立的作用域,即在一个模块里面定义的变量与函数,默认为私有的,对其他模块不可见。
1、module对象
每个 wxs 模块均有一个内置的 module 对象,通过exports属性,可以对外共享本模块的私有变量与函数。即一个模块要想对外暴露其内部的私有变量与函数,只能通过 module.exports 实现。如下:

// /pages/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";

2、require函数
在.wxs模块中引用其他 wxs 文件模块,可以使用 require 函数。引用的时候,要注意如下几点:

  • 只能引用 .wxs 文件模块,且必须使用相对路径。
  • wxs 模块均为单例,wxs 模块在第一次被引用时,会自动初始化为单例对象。多个页面,多个地方,多次引用,使用的都是同一个 wxs 模块对象。
  • 如果一个 wxs 模块在定义之后,一直没有被引用,则该模块不会被解析与运行。
// /pages/logic.wxs
var tools = require("./tools.wxs");
console.log(tools.FOO);  // 'hello world' from tools.wxs
console.log(tools.bar("logic.wxs"));  // logic.wxs
console.log(tools.msg);  // some msg

3、<wxs> 标签
在这里插入图片描述

module 属性是当前 <wxs> 标签的模块名。在单个 wxml 文件内,建议其值唯一。有重复模块名则按照先后顺序覆盖(后者覆盖前者)。不同文件之间的 wxs 模块名不会相互覆盖。其命名必须符合下面两个规则:

  • 首字符必须是:字母(a-zA-Z),下划线(_)
  • 剩余字符可以是:字母(a-zA-Z),下划线(_), 数字(0-9)

src 属性可以用来引用其他的 wxs 文件模块。引用的时候,要注意如下几点:

  • 只能引用 .wxs 文件模块,且必须使用相对路径。
  • wxs 模块均为单例,wxs 模块在第一次被引用时,会自动初始化为单例对象。多个页面,多个地方,多次引用,使用的都是同一个 wxs 模块对象。
  • 如果一个 wxs 模块在定义之后,一直没有被引用,则该模块不会被解析与运行。
<!-- page/index/index.wxml -->
<wxs src="./../tools.wxs" module="tools" />
<view> {
  
  {tools.msg}} </view>  <!-- some msg -->
<view> {
  
  {tools.bar(tools.FOO)}} </view>  <!-- 'hello world' from tools.wxs -->

注:

  • 模块只能在定义模块的 WXML 文件中被访问到。使用 <include><import> 时,<wxs>
    模块不会被引入到对应的 WXML 文件中。
  • 标签中,只能使用定义该 <template> 的 WXML 文件中定义的 <wxs> 模块。

三、变量

WXS 中的变量均为值的引用。没有声明的变量直接赋值使用,会被定义为全局变量。如果只声明变量而不赋值,则默认值为 undefined。声明变量用var,其表现与javascript一致,会有变量提升,不支持let、const。变量命名必须符合下面两个规则:

  • 首字符必须是:字母(a-zA-Z),下划线(_)
  • 剩余字符可以是:字母(a-zA-Z),下划线(_), 数字(0-9)
var foo = 1;
var bar = "hello world";
var i; // i === undefined
// 上面代码,分别声明了 foo、 bar、 i 三个变量
// 然后,foo 赋值为数值 1 ,bar 赋值为字符串 "hello world"
<!-- 以下标识符不能作为变量名 -->
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

四、注释

WXS 主要有 3 种注释的方法。如下:

<!-- wxml -->
<wxs module="sample">
// 方法一:单行注释
/*
方法二:多行注释
*/
/*
方法三:结尾注释。即从 /* 开始往后的所有 WXS 代码均被注释
var a = 1;
var b = 2;
var c = "fake";
</wxs>

上述例子中,所有 WXS 代码均被注释掉了。方法三 和 方法二 的唯一区别是,没有 */ 结束符。

五、运算符

1、基本运算符

var a = 10, b = 20;
// 加法运算
console.log(30 === a + b);
// 减法运算
console.log(-10 === a - b);
// 乘法运算
console.log(200 === a * b);
// 除法运算
console.log(0.5 === a / b);
// 取余运算
console.log(10 === a % b);
// 加法运算(+)也可以用作字符串的拼接
var c = '.w' , d = 'xs';
console.log('.wxs' === c + d);

2、一元运算符

var a = 10, b = 20;
// 自增运算
console.log(10 === a++);
console.log(12 === ++a);
// 自减运算
console.log(12 === a--);
console.log(10 === --a);
// 正值运算
console.log(10 === +a);
// 负值运算
console.log(0-10 === -a);
// 取反运算
console.log(false === !a);
// delete 运算
console.log(true === delete a.fake);
// void 运算
console.log(undefined === void a);
// typeof 运算
console.log("number" === typeof a);

3、比较运算符

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));

4、等值运算符

var a = 10, b = 20;
// 等号
console.log(false === (a == b));
// 非等号
console.log(true === (a != b));
// 全等号
console.log(false === (a === b));
// 非全等号
console.log(true === (a !== b));

5、赋值运算符

var a = 10, b = 20;
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);

6、其他运算符

var a = 10, b = 20;
// 逻辑与
console.log(20 === (a && b));
// 逻辑或
console.log(10 === (a || b));
//条件运算符
console.log(20 === (a >= 10 ? a + 10 : b + 10));
//逗号运算符
console.log(20 === (a, b));

注:以上只取了经常用到的运算,详见:链接

六、语句

1、if 语句

// if ...
if (表达式) 语句;
if (表达式)
  语句;
if (表达式) { 
   
  代码块;
}
// if ... else
if (表达式) 语句;
else 语句;
if (表达式)
  语句;
else
  语句;
if (表达式) { 
   
  代码块;
} else { 
   
  代码块;
}
// if ... else if ... else ...
if (表达式) { 
   
  代码块;
} else if (表达式) { 
   
  代码块;
} else if (表达式) { 
   
  代码块;
} else { 
   
  代码块;
}

2、switch 语句

switch (表达式) { 
   
  case 变量:
    语句;
  case 数字:
    语句;
    break;
  case 字符串:
    语句;
  default:
    语句;
}
  • default 分支可以省略不写。
  • case 关键词后面只能使用:变量,数字,字符串。

3、for 语句

for (语句; 语句; 语句)
  语句;
for (语句; 语句; 语句) { 
   
  代码块;
}
  • 支持使用 break,continue 关键词。

4、while 语句

while (表达式)
  语句;
while (表达式){ 
   
  代码块;
}
do { 
   
  代码块;
} while (表达式)
  • 当表达式为 true 时,循环执行语句或代码块。
  • 支持使用 break,continue 关键词。

七、数据类型

1、number: 数值
number 包括两种数值:整数,小数。
属性

  • constructor:返回字符串 “Number”

方法(仅取常用方法)

  • toString:将数值类型转换成字符串
  • valueOf:指定对象的原始值
  • toFixed:获取数值指定小数位数的数值

2、string:字符串
属性

  • constructor:返回字符串 “String”
  • length:返回该字符串的长度

方法(仅取常用方法)

  • toString:转换成字符串
  • valueOf:指定对象的原始值
  • charAt:获取[String]指定位置的字符
  • concat:连接两个或多个字符串,并返回连接后的结果
  • indexOf:获取某个指定的字符串值在[String]中首次出现的位置
  • lastIndexOf:指定的字符串值在[String]内最后出现的位置
  • replace:在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串
  • slice:返回指定起始位置与结束位置的字符,[String]位置序号从0开始
  • split:把一个字符串分割成字符串数组

3、object:对象
object 是一种无序的键值对。
属性

  • constructor:返回字符串 “Object”

方法

  • toString:返回字符串 “[object Object]”。

4、function:函数
function 里面可以使用 arguments 关键词。该关键词目前只支持以下的属性:

  • length: 传递给函数的参数个数。
  • [index]: 通过 index 下标可以遍历传递给函数的每个参数。
var a = function(){ 
   
  console.log(3 === arguments.length);
  console.log(100 === arguments[0]);
  console.log(200 === arguments[1]);
  console.log(300 === arguments[2]);
};
a(100,200,300);

属性

  • constructor:返回字符串 “Function”
  • length:返回函数的形参个数。

方法

  • toString:返回字符串 “[object Object]”。
var func = function (a,b,c) { 
    }
console.log("Function" === func.constructor);
console.log(3 === func.length);
console.log("[function Function]" === func.toString());

5、boolean:布尔值
布尔值只有两个特定的值:true 和 false。
属性

  • constructor:返回字符串 “Boolean”

方法

  • toString:转换成字符串
  • valueOf:返回指定对象的原始值

6、array: 数组
属性

  • constructor:返回字符串 “Array”
  • length:返回数组长度

方法(仅取常用方法)

  • toString:转换成字符串
  • concat:连接多个数组,返回连接后的数组副本
  • join:把数组中的所有元素以指定的分隔符组成一个字符串
  • pop:函数返回数组[array]的最后一个元素,同时会将[array]的最后一个元素删除
  • push:数组的末尾添加一个或多个元素,并返回新的长度
  • shift:函数返回数组[array]的第一个元素,同时会将[array]的第一个元素删除
  • slice:返回数组[Array]指定起始位置与结束位置的元素,并组合成新的数组
  • splice:删除数组指定位置后的指定个数的元素,同时也可以用新的元素值替换被删除元素的位置
  • unshift:向数组的开头添加一个或更多元素,并返回新的长度
  • indexOf:返回数组中某个指定的元素位置
  • every:用于检测数组所有元素是否都符合指定条件
  • some:检测数组内是否含有满足条件的元素
  • forEach:检测数组内是否含有满足条件的元素
  • map:返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。它不会更改原数组的值
  • filter:返回数组内符合条件的元素

7、date:日期
生成 date 对象需要使用 getDate函数, 返回一个当前时间的对象。

var date = getDate(); //返回当前时间对象

// 从1970年1月1日00:00:00 UTC开始计算的毫秒数
// Fri Jul 14 2017 10:40:00 GMT+0800 (中国标准时间)
date = getDate(1500000000000); 
// 日期字符串
// Fri Jul 14 2017 00:00:00 GMT+0800 (中国标准时间)
date = getDate('2017-7-14');
// 日期字符串,其格式为:"month day, year hours:minutes:seconds"
// Fri Jul 14 2017 10:40:00 GMT+0800 (中国标准时间)
date = getDate(2017, 6, 14, 10, 40, 0, 0);

属性

  • constructor:返回字符串 “Date”

方法(仅取常用方法)

  • toString:把 Date 对象转换为字符串
  • valueOf:返回 Date 对象的原始值
  • getTime:返回距 1970 年 1 月 1 日之间的毫秒数
  • getFullYear:从 Date 对象以四位数字返回年份
  • getMonth:返回表示月份的数字。返回值是 0(一月) 到 11(十二月) 之间的一个整数
  • getDate:返回月份的某一天。返回值是 1 ~ 31 之间的一个整数
  • getDay:返回一周(0~6)的某一天的数字。星期天为 0, 星期一为 1, 以此类推
  • getHours:返回时间的小时字段
  • getMinutes:返回 Date 对象的分钟 (0 ~ 59)
  • getSeconds:返回 Date 对象的秒数 (0 ~ 59)
  • getMilliSeconds:返回 Date 对象的毫秒(0 ~ 999)
  • setTime:以毫秒设置 Date 对象
  • setFullYear:设置 Date 对象中的年份(四位数字)
  • setMonth:设置 Date 对象中月份 (0 ~ 11)
  • setDate:设置 Date 对象中月的某一天 (1 ~ 31)
  • setHours:设置 Date 对象中的小时 (0 ~ 23)
  • setMinutes:设置 Date 对象的分钟 (0 ~ 59)
  • setSeconds:设置 Date 对象的秒数 (0 ~ 59)
  • getMilliSeconds:设置 Date 对象的毫秒(0 ~ 999)

8、regexp:正则
生成 regexp 对象需要使用 getRegExp函数。getRegExp(pattern, flags)参数:

  • pattern: [必需] 字符串或正则表达式
  • flags:[可选] 可选值如下:
    • g: global表示是否是全局检索,默认false
    • i: ignoreCase表示是否忽略大小写,默认false
    • m: multiline表示是否多选,默认false

属性

  • constructor:返回字符串 “RegExp”
  • source:返回正则表达式的匹配模式,即参数:pattern
  • global:返回是否设置了 “g” 修饰符
  • ignoreCase:返回是否设置了 “i” 修饰符
  • multiline:返回是否设置了 “m” 修饰符
  • lastIndex:规定下次匹配的起始位置(该属性只有设置标志 g 才能使用),可读可写,默认值0
var a = getRegExp("x", "img");
console.log("x" === a.source);
console.log(true === a.global);
console.log(true === a.ignoreCase);
console.log(true === a.multiline);

方法

  • exec:根据正则表达式的条件,检索字符串中匹配的字符
  • test:检测一个字符串是否匹配某个模式
  • toString:返回正则表达式的字符串值
var regexp = getRegExp('\d+', 'img'); // 匹配数字
regexp.lastIndex = 3; // 设置起始检索位置为3
var k = regexp.exec('af4edw2dfe'); // 从位置3开始找出 "af4edw2dfe"中第一个数字

9、数据类型判断
constructor 属性,示例代码:

var number = 10;
console.log( "Number" === number.constructor );
var string = "str";
console.log( "String" === string.constructor );
var boolean = true;
console.log( "Boolean" === boolean.constructor );
var object = { 
   };
console.log( "Object" === object.constructor );
var func = function(){ 
   };
console.log( "Function" === func.constructor );
var array = [];
console.log( "Array" === array.constructor );
var date = getDate();
console.log( "Date" === date.constructor );
var regexp = getRegExp();
console.log( "RegExp" === regexp.constructor );

typeof ,示例代码:

var number = 10;
var boolean = true;
var object = { 
   };
var func = function(){ 
   };
var array = [];
var date = getDate();
var regexp = getRegExp();
console.log( 'number' === typeof number );
console.log( 'boolean' === typeof boolean );
console.log( 'object' === typeof object );
console.log( 'function' === typeof func );
console.log( 'object' === typeof array );
console.log( 'object' === typeof date );
console.log( 'object' === typeof regexp );
console.log( 'undefined' === typeof undefined );
console.log( 'object' === typeof null );

八、基础类库

1、console
console.log 方法用于在 console 窗口输出信息。它可以接受多个参数,将它们的结果连接起来输出。
2、Math
Math对象用于执行数学任务。
属性

名称 说明
Math.E 代表算术常量 e,即自然对数的底数,其值近似于 2.71828
Math.LN10 就是 loge10,即 10 的自然对数,其值近似于 2.3025850929940459011
Math.LN2 就是 loge2,即 2 的自然对数,其值近似于 0.69314718055994528623
Math.LOG2E 就是 log2e,即以 2 为底 e 的对数,其值近似于 1.442695040888963387
Math.LOG10E 就是 log10e,即以 10 为底 e 的对数,其值近似于 0.43429448190325181667
Math.PI 返回圆的周长和它的直径之比,即圆周率
Math.SQRT1_2 返回 2 的平方根的倒数。这个值近似为 0.7071067811865476
Math.SQRT2 返回 2 的平方根。这个值近似为 1.4142135623730951

方法

名称 说明
Math.abs(x) 返回数的绝对值
Math.acos(x) 返回数的反余弦值
Math.asin(x) 返回数的反正弦值
Math.atan(x) 以介于 -PI/2 与 PI/2 弧度之间的数值来返回 x 的反正切值
Math.atan2(y,x) 返回从 x 轴到点 (x,y) 的角度(介于 -PI/2 与 PI/2 弧度之间)
Math.ceil(x) 执行的是向上取整计算,它返回的是大于或等于函数参数,并且与之最接近的整数
Math.exp(x) 返回 e 的指数
Math.floor(x) 执行的是向下取整计算,它返回的是小于或等于函数参数,并且与之最接近的整数
Math.log(x) 返回数的自然对数(底为e)
Math.max(x,y,z…) 返回参数中的最高值
Math.min(x,y,z…) 返回参数中的最低值
Math.pow(x,y) 返回 x 的 y 次幂
Math.random() 返回 0 ~ 1 之间的随机数
Math.round(x) 把一个数字舍入为最接近的整数
Math.sin(x) 返回数的正弦
Math.sqrt(x) 返回数的平方根
Math.tan(x) 返回角的正切

3、JSON

  • stringify(object): 将 object 对象转换为 JSON 字符串,并返回该字符串。
  • parse(string): 将 JSON 字符串转化成对象,并返回该对象。
// 特殊值举例
console.log(undefined === JSON.stringify());
console.log(undefined === JSON.stringify(undefined));
console.log("null"===JSON.stringify(null));
console.log("111"===JSON.stringify(111));
console.log('"111"'===JSON.stringify("111"));
console.log("true"===JSON.stringify(true));
console.log(undefined===JSON.stringify(function(){ 
   }));
console.log(undefined===JSON.parse(JSON.stringify()));
console.log(undefined===JSON.parse(JSON.stringify(undefined)));
console.log(null===JSON.parse(JSON.stringify(null)));
console.log(111===JSON.parse(JSON.stringify(111)));
console.log("111"===JSON.parse(JSON.stringify("111")));
console.log(true===JSON.parse(JSON.stringify(true)));
console.log(undefined===JSON.parse(JSON.stringify(function(){ 
   })));

4、Number
属性

名称 说明
Number.MAX_VALUE 返回JS中可表示的最大的数
Number.MIN_VALUE 返回JS中可表示的最小的数。(接近 0,但不是负数)
Number.NEGATIVE_INFINITY 负无穷大,溢出时返回该值
Number.POSITIVE_INFINITY 正无穷大,溢出时返回该值

5、Date
属性

名称 说明
Date.parse( [dateString] ) 解析一个日期时间字符串,并返回 1970/1/1 午夜距离该日期时间的毫秒数
Date.UTC(year,month,day,hours,minutes,seconds,ms) 根据世界时返回 1970 年 1 月 1 日 到指定日期的毫秒数。参数:year/month/day 必须
Date.now() 返回自1970年1月1日 00:00:00 UTC到当前时间的毫秒数

6、Global
属性

  • NaN
  • Infinity
  • undefined

方法:调用时,无需使用 Global.parseInt(…),而是直接使用 parseInt(…)

名称 说明
parseInt(string, radix) 解析一个字符串,并返回一个整数。string 必需,要被解析的字符串;radix 可选,表示要解析的数字的基数,该值介于 2 ~ 36 之间,即十进制解析,还是十六进制解析。
parseFloat(string) 解析一个字符串,并返回一个浮点数。如果非数值,则返回为 NaN
isNaN(x) 返回true表示x不是数值,否则是数值
isFinite(number) 检查其参数是否是无穷大。有限数字返回true,正、负无穷大的数或非数字返回false
decodeURI(URIstring) 对 encodeURI() 函数编码过的 URI 进行解码
decodeURIComponent(URIstring) 对 encodeURIComponent() 函数编码过的 URI 进行解码
encodeURI(URIstring) 把字符串作为 URI 进行编码。它保持 http://中的特殊字符
encodeURIComponent(URIstring) 把字符串作为 URI 组件进行编码。它会连http:// 中的 😕/ 都编码

九、参考资料

WXS语法参考

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/24414.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信