当前位置: 首页 > news >正文

支持JavaScript基础语法和数据类型,以及数组、集合、字典、对象操作。 支持require引用模块。 二、安装 1 install-package AScript 2 install-pac

支持JavaScript基础语法和数据类型,以及数组、集合、字典、对象操作。

支持require引用模块。

二、安装
1 install-package AScript
2 install-package AScript.Lang.JavaScript
三、使用说明
1、注册语言
1 Script.Langs.Set(“js”, JavaScriptLang.Instance);
2 // 可全局设置为默认语言
3 // Script.Langs.Set(“js”, JavaScriptLang.Instance, setDefault: true);
2、定义函数
复制代码
1 var s = @"
2 function sum(a,b) {
3 return a+b;
4 }
5 sum(10,20)
6 ";
7 var script = new Script();
8 script.Context.Langs = new [] { “js” };
9 var result = script.Eval(s);
10 Assert.AreEqual(30L, result);
复制代码
3、正则表达式
js中使用 /{pattern}/{options} 格式表示正则表达式。

复制代码
1 var script = new Script();
2 script.Context.Langs = new[] { “js” };
3 var result = script.Eval<List>(“‘hello world World’.match(/world/gi)”);
4 Assert.AreEqual(2, result.Count);
5 Assert.AreEqual(“world”, result[0]);
6 Assert.AreEqual(“World”, result[1]);
复制代码
4、解构
1)对象解构:支持默认值、别名、嵌套解构。

复制代码
1 var s = @"
2 var {name, age} = {name: ‘Alice’, age: 25}; // name=‘Alice’, age=25
3 var {a, b = 100} = {a: 10}; // a=10, b=100
4 var {inner: {name}} = {inner: {name: ‘Tom’, age: 20}}; // name=‘Tom’
5 var {name: aliasName} = {name: ‘Bob’}; // aliasName=‘Bob’
6 ";
7 var script = new Script();
8 script.Context.Langs = new[] { “js” };
9 script.Eval(s);
复制代码
2)数组解构:支持默认值、嵌套解构

复制代码
1 var s = @"
2 var [x, y, z] = [10, 20, 30]; // x=10, y=20, z=30
3 var [x, , z] = [1, 2, 3]; // x=1, z=3
4 var [a = 5, b = 10] = [3]; // a=3, b=10
5 var [[inner], outer] = [[10], 20]; // inner=10, outer=20
6 ";
7 var script = new Script();
8 script.Context.Langs = new[] { “js” };
9 script.Eval(s);
复制代码
3)混合解构:对象、数组混合解构

1 var script = new Script();
2 script.Context.Langs = new[] { “js” };
3 script.Eval(“var [first, {name}] = [1, {name: ‘John’}]”);
4 Assert.AreEqual(1L, script.Eval(“first”));
5 Assert.AreEqual(“John”, script.Eval(“name”));
5、字符串插值
复制代码
1 var s = @"
2 var name=‘tom’;
3hello ${name}, 5+8=${5+8}
4 ";
5 var script = new Script();
6 script.Context.Langs = new [] { “js” };
7 Assert.AreEqual(“hello tom, 5+8=13”, script.Eval(s));
复制代码
6、字符串函数
复制代码
1 String.fromCharCode(65,66,67); // ‘ABC’
2 ‘hello’.startsWith(‘he’); // true
3 ‘hello’.endsWith(‘a’); // false
4 ‘hello’.includes(‘e’); // true
5 ‘hello’.indexOf(‘el’); // 1
6 ‘hello’.indexOf(‘el’, 2); // -1
7 ‘hello’.lastIndexOf(‘l’); // 3
8 ‘hello’.search(‘el’); // 1
9 ‘hello’.search(/el/gi); // 1
10 ‘hello’.substr(-2); // ‘lo’
11 ‘hello’.substr(-2,1); // ‘l’
12 ‘hello’.substring(2); // ‘llo’
13 ‘hello’.substring(2,4); // ‘ll’
14 ‘hello’.slice(2); // ‘llo’
15 ‘hello’.slice(2,4); // ‘ll’
16 ‘hello’.slice(-3); // ‘llo’
17 ‘hello’.slice(-3,-1); // ‘ll’
18 ‘Hello’.toLowerCase(); // ‘hello’
19 ‘Hello’.toUpperCase(); // ‘HELLO’
20 ’ hello ‘.trim(); // ‘hello’
21 ’ hello ‘.trimStart(); // ‘hello ’
22 ’ hello ‘.trimEnd(); // ’ hello’
23 ‘hello’.padStart(7); // ’ hello’
24 ‘hello’.padStart(7, ‘x’); // ‘xxhello’
25 ‘hello’.padEnd(7); // ‘hello ’
26 ‘hello’.padEnd(7, ‘x’); // ‘helloxx’
27 ‘hello’.charAt(1); // ‘e’
28 ‘hello’.charCodeAt(1); // 101L
29 ‘hello tom, I am Tony’.match(‘to’); // [‘to’]
30 ‘hello tom, I am Tony’.match(/to/); // [‘to’]
31 ‘hello tom, I am Tony’.match(/to/gi); // [‘to’, ‘To’]
32 ‘hello tom, I am Tony’.replace(‘to’, ‘x’); // 替换第1项:‘hello xm, I am Tony’
33 ‘hello tom, I am Tony’.replaceAll(‘to’, ‘x’); // 替换所有项(区分大小写):‘hello xm, I am Tony’
34 ‘hello tom, I am Tony’.replace(/to/g, ‘x’); // 替换匹配项:‘hello xm, I am Tony’
35 ‘hello tom, I am Tony’.replace(/to/gi, ‘x’); // 替换匹配项:‘hello xm, I am xny’
36 ‘a,b,c’.split(’,’); // [‘a’,‘b’,‘c’]
37 ‘hello’.repeat(2); // ‘hellohello’
38 ‘hello’.concat(’ ', ‘world’); // ‘hello world’
复制代码
7、创建数组
对应C#中的List类型。

复制代码
1 var s = @"
2 var arr1 = [1,2,3];
3 var arr2 = new Array(1,2,3);
4 var arr3 = new Array(2);
5 ";
6 var script = new Script();
7 script.Context.Langs = new[] { “js” };
8 script.Eval(s);
9 var arr1 = script.Eval<List>(“arr1”);
10 Assert.AreEqual(3, arr1.Count);
11 Assert.AreEqual(1L, arr1[0]);
12 Assert.AreEqual(2L, arr1[1]);
13 Assert.AreEqual(3L, arr1[2]);
14 var arr3 = script.Eval<List>(“arr3”);
15 Assert.AreEqual(2, arr3.Count);
16 Assert.IsNull(arr3[0]);
17 Assert.IsNull(arr3[1]);
复制代码
8、数组函数
复制代码
1 [1, 2].concat([3, 4]); // [1, 2, 3, 4]
2 [1, 2, 3].join(‘,’); // ‘1,2,3’
3 [1, 2, 3].indexOf(2); // 1
4 [1, 2, 3].includes(2); // true
5 [1, 2, 3].reverse(); // [3, 2, 1]
6 [1, 2, 3, 4, 5].filter(x => x % 2 == 0); // [2, 4]
7 [1, 2, 3].map(x => x * 2); // [2, 4, 6]
8 [1, 2, 3].reduce((acc, x) => acc + x); // 6
9 [1, 2, 3].reduce((acc, x) => acc + x, 10); // 16
10 [2, 4, 6].every(x => x % 2 == 0); // true
11 [1, 3, 5].some(x => x % 2 == 0); // false
12 [1, 2, 3].find(x => x > 1); // 2
13 [1, 2, 3].findIndex(x => x > 1); // 1
14 [1, 2, 3].fill(0); // [0, 0, 0]
15 [1, 2, 3].forEach(x => { }); // 遍历数组
16 [1, 2, 3].pop(); // 3
17 [1, 2, 3].push(5, 6, 7); // 数组结尾处理添加元素
18 [1, 2, 3].shift(); // 移除并返回首部元素
19 [1, 2, 3].unshift(5, 9, 10); // 从首部插入3个元素
20 [1, 2, 3, 4, 5].slice(2, 4); // 截取列表[2,4):[3, 4]
21 [1, 2, 3, 4, 5].splice(1, 2); // 截取并返回列表:[2, 3]
复制代码
9、时间Date
对应C#中的DateTime类型。

复制代码
1 new Date(); // 当前时间
2 Date.now(); // 当前时间戳
3 new Date(2026, 6, 4); // 2026-07-04
4 var time = new Date(‘2026-7-4’);
5 time.getYear(); // 获取年份-1900:126
6 time.getMonth(); // 获取月份-1:6
7 time.getDate(); // 获取月份中的天(1~31):4
8 time.getDay(); // 获取星期:6
9 time.getHours();
10 time.getMinutes();
11 time.getSeconds();
12 time.getMilliseconds();
13 time.getTime(); // 获取时间戳
14 time.toString(‘yyyy-MM-dd’); // ‘2026-07-04’
15 time.setFullYear(2025);
16 time.setFullYear(2025, 6);
17 time.setFullYear(2025, 6, 4);
18 time.setHours(21);
19 time.setMinutes(36);
20 time.setSeconds(15);
21 time.setMilliseconds(238);
复制代码
10、字典Map
对应C#中的Dictionary<object, object>类型。

复制代码
1 var m = new Map([[‘a’, 1], [‘b’, 2], [‘c’, 3]]);
2 m.set(‘d’, 4);
3 m.size; // 4
4 m.get(‘a’); // 1
5 m.has(‘a’); // true
6 m.delete(‘c’);
7 m.clear();
8 m.keys();
9 m.values();
10 m.entries();
11 m.forEach(function(value, key) { });
复制代码
11、集合Set
对应C#中的HashSet类型。

复制代码
1 var set = new Set([1, 2, 3]);
2 set.add(4);
3 set.has(2);
4 set.delete(3);
5 set.clear();
6 set.size;
7 set.forEach(x => { });
复制代码
12、Promise
js异步编程,对应C#中的Task。

then/catch/finally
1 var script = new Script();
2 script.Context.Langs = new[] { “js” };
3 var result = script.Eval(“await new Promise((resolve, reject) => resolve(1)).then(x => x + 1).catch(err=>{})”);
4 Assert.AreEqual(2L, result);
Promise.all
复制代码
1 var s = @"
2 var arr = await Promise.all([Promise.resolve(1), Promise.resolve(2), Promise.resolve(3)]);
3 arr[0] + arr[1] + arr[2]
4 “;
5 var script = new Script();
6 script.Context.Langs = new[] { “js” };
7 var result = script.Eval(s);
8 Assert.AreEqual(6L, result);
复制代码
Promise.any
1 var script = new Script();
2 script.Context.Langs = new[] { “js” };
3 var result = script.Eval(“await Promise.any([Promise.resolve(1), Promise.resolve(2), Promise.resolve(3)])”);
4 Assert.AreEqual(1L, result);
13、数学函数
复制代码
1 Math.abs(-5); // 5
2 Math.acos(0.5);
3 Math.acosh(2);
4 Math.asin(0.5);
5 Math.asinh(2);
6 Math.atan(1);
7 Math.atan2(1, 1);
8 Math.atanh(0.5);
9 Math.tan(0);
10 Math.tanh(0);
11 Math.sign(5);
12 Math.sin(0);
13 Math.sinh(0);
14 Math.cbrt(27);
15 Math.ceil(5.1);
16 Math.clz32(1);
17 Math.cos(0);
18 Math.cosh(0);
19 Math.exp(1);
20 Math.expm1(1);
21 Math.floor(5.9); // 5.0
22 Math.fround(5.5);
23 Math.hypot(3, 4);
24 Math.imul(2, 3);
25 Math.log(1);
26 Math.log10(100);
27 Math.log1p(1);
28 Math.log2(8);
29 Math.max(1, 10, 5); // 10.0
30 Math.min(1, 10, 5); // 1.0
31 Math.pow(2, 3); // 8.0
32 Math.random(); // [0,1)
33 Math.round(5.4); // 5.0
34 Math.sqrt(4); // 2.0
35 Math.pow(3, 2); // 9.0
36 Math.trunc(5.9); // 5.0
37 Math.E;
38 Math.PI;
39 Math.SQRT2;
40 Math.SQRT1_2;
41 Math.LN2;
42 Math.LN10;
43 Math.LOG2E;
44 Math.LOG10E;
复制代码
14、setTimeout/clearTimeout
复制代码
1 string code = @”
2 var result = 0;
3 function onTimeout(a, b) {
4 result = a + b;
5 }
6 var handle = setTimeout(onTimeout, 50, 10, 20);
7 handle;
8 “;
9 var script = new Script();
10 script.Context.Langs = new[] { “js” };
11 script.Eval(code);
12 Thread.Sleep(100);
13 Assert.AreEqual(30L, script.Eval(“result”));
复制代码
15、setInterval/clearInterval
复制代码
1 string code = @”
2 var count = 0;
3 function handler() { count = 1; }
4 var timer = setInterval(handler, 40);
5 timer;
6 ";
7 var script = new Script();
8 script.Context.Langs = new[] { “js” };
9 var timerObj = script.Eval(code);
10 Thread.Sleep(70);
11 script.Eval(“clearInterval(timer)”);
12 Assert.AreEqual(1L, script.Eval(“count”));
复制代码
16、if条件
支持对象检测,null/undefined/0/false/空字符串为false,其他值为true。

复制代码
1 string code = @"
2 var n = 15;
3 var result = ‘’;
4 if (n < 10) {
5 result = ‘less than 10’;
6 } else if (n < 20) {
7 result = ‘less than 20’;
8 } else {
9 result = ‘20 or more’;
10 }
11 result;
12 ";
13 var script = new Script();
14 script.Context.Langs = new[] { “js” };
15 Assert.AreEqual(“less than 20”, script.Eval(code));

http://www.cnnetsun.cn/news/3507932.html

相关文章:

  • Python新手入门:环境搭建与基础语法详解
  • 博客导航系统设计:提升老文章阅读量的技术方案
  • C++多线程编程:跨平台互斥锁原理与实战指南
  • AI自动化不是写脚本,而是重构工程思维:资深架构师拆解4层抽象模型与交付验收标准
  • 期末作业(1)
  • 2026年权威榜单安全触边装置推荐,助你提升工业安全性
  • 2021年Android面试趋势与核心技术解析
  • 3个简单步骤彻底告别键盘连击烦恼:让老旧机械键盘重获新生
  • FPGA实时4K超分辨率方案:Agilex7硬件加速AI视频处理实践
  • 为什么ORACLE使用JDBC查询SYSDATE时,RS.getDate能获取到时间部分?
  • AM62L CBASS硬件防火墙配置实战:从寄存器解析到多域安全策略
  • 污水提升泵售后哪家强?看准这三点不踩坑
  • Ofd2Pdf:5分钟掌握OFD转PDF的本地化高效解决方案
  • 策略从研究端迁到券商端:字段映射、权限和订单回报逐项核对
  • SDRAM控制器子系统:防火墙、VRFB与调度器深度解析
  • Node.js核心价值与六大实战场景深度解析
  • 20260718_143934 课程头图
  • 基于OpenClaw与SecGPT-14B的智能红蓝对抗自动化框架实战
  • Python流程判断核心技巧与工程实践
  • AM62L TRNG硬件随机数生成器:寄存器级配置与安全实践指南
  • Python实现工程化四则运算生成器的设计与实践
  • SpringBoot+Vue充电桩管理平台:前后端分离项目实战指南
  • STM32嵌入式开发入门指南:从硬件选型到项目实战
  • 2026年唯一被平台官方认证的AI副业路径:飞书多维表格×Coze智能体×微信小商店全链路部署(含可复用工作流模板)
  • 低代码财务系统怎么样?从开发者的实战视角剖析技术选型
  • 大语言模型训练成本为何暴涨300%?:从词嵌入到RLHF的7层算力黑洞全拆解
  • 初始化 CodeGraph 索引
  • go基础中碰到的疑惑点
  • JavaMail邮件发送开发实战与优化指南
  • 越华环保集团数字化污水治理系统架构拆解:从边缘采集到数字孪生闭环