news 2026/7/19 5:40:12

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
支持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));

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/19 5:39:23

Python新手入门:环境搭建与基础语法详解

1. Python入门第一课&#xff1a;环境搭建与基础语法 作为一名从零开始学习Python的开发者&#xff0c;第一天最关键的任务就是搭建开发环境并掌握基础语法结构。我依然记得自己第一次安装Python时的困惑——面对众多版本和安装选项不知如何选择。经过多年实战&#xff0c;我总…

作者头像 李华
网站建设 2026/7/19 5:38:58

博客导航系统设计:提升老文章阅读量的技术方案

1. 项目背景与核心价值作为一个写了十几年博客的老站长&#xff0c;我深知内容沉淀的痛点和爽点。当你的博客文章积累到300篇以上时&#xff0c;连你自己都会忘记曾经写过什么。更别提读者了——他们可能因为一篇优质内容关注你&#xff0c;却对你其他领域的深度文章一无所知。…

作者头像 李华
网站建设 2026/7/19 5:37:50

C++多线程编程:跨平台互斥锁原理与实战指南

1. 项目概述&#xff1a;为什么我们需要跨平台的互斥锁&#xff1f;在C多线程编程的世界里&#xff0c;数据竞争&#xff08;Data Race&#xff09;是程序员最常遇到也最头疼的“幽灵”之一。想象一下&#xff0c;你和你的同事同时打开一个共享的Excel表格&#xff0c;都想修改…

作者头像 李华
网站建设 2026/7/19 5:35:02

2026年权威榜单安全触边装置推荐,助你提升工业安全性

安全触边装置成为工业安全设备的重要组成部分&#xff0c;其重要功能在于通过触压感应&#xff0c;使设备在遇到人员或障碍物时立即停止。这种反应机制大大降低了夹伤的风险&#xff0c;尤其在AGV车和自动门等智能设备中应用广泛。除了提供基本的安全保护&#xff0c;安全触边还…

作者头像 李华