function myjsa(){
//开始计时
console.timeStart();
vr="JSA,走起!";
MsgBox(vr);
//输出计时时间
console.timelog("执行时间:");
}
注意事项:
- JSA的学习资源太少了,网上像样的课程只有几个,写给自己后期备查。
- 编程过程中少用MsgBox和Alert提示框尽量少用,调试使用console.log()控制台输出。控制台输出内容较多,可以右击清空或使用console.clear()
- 强制断点,debugger
一、函数
- 函数构成
- 返回值
- 参数
- const方式声明
- 内联函数
- 箭头函数
二、变量
- var声明变量
function myBL(){ var i=1; var x=i; //x=1 var i=2; console.log(x); //x=1,元变量改变,不改变已赋值的其他变量 var [a,b]=[3,4]; [a,b]= [b,a]; //交换变量 console.log(a,b); }
- let声明变量:避免同一作用域 { } 内重复声明,主要用于不同作用域,同样功能名称的局部变量。监视窗口不会显示,不利于调试。
- const声明常量:同一作用域 { } 内只能声明一次,不能重复赋值
- 全局变量:可以在“立即窗口”中直接使用
- 不要在函数中不声明,直接使用变量
三、数据类型
- JS不能声明类型, 变量也可以存储任意类型
- 基础类型:Number、String、Boolean、Null、Undefined、BigInt
- 引用类型:Object、Function、Date日期、RegExp正则、Map键值对、Set不重复集合
- 其他类型:NaN,Infinity,-Infinity
- 查看数据类型:typeof()
四、数字类型
- toString():转为字符串
- val(i):字符串转数字(郑提供)
- round(i,d):取几位小数(郑提供)
五、字符串类型:索引 0 到 n-1
- substring()
- slice(开始索引号,位数)切片
- substitute():
- includes():是否包含字符串
- search():查找字符串的位置
六、运算符
- 算术运算符:乘方**、取模(余)%(可以用来取小数部分)
- 比较运算符:把数值写在前面,等于2==a,不等于2!=b
- 逻辑运算符:与&&、或||、非!(主要用于负向描述)
- 类型判断:全等于===,主要判断数值与字符串
- 三元运算符:条件 ? 真 : 假
function myYSF(){ var i=1; i++; //i=i+1,尽量少用,避免遗忘 console.log(i); i+=2 //i=i+2 console.log(i); var j=10; j--; //j=j-1,尽量少用,避免遗忘 console.log(j); j-=2; //j=j-2 console.log(j); var x=10,y; y=x>5?2:1 //条件x>5 真y=2 假y=1 console.log(y) }
七、日期类型
- new Date():初始化方式
- 月份是从0开始计算,建议用字符串表示
- getdate():获取日期
- getday():获取星期
- (郑提供)日期全部用cdate()转换成OA日期(即Excel编码方式 )再进行操作
- (郑提供)日期操作用 扩展函数DateUtils.方法() 进行操作
八、对象
- JSA更多使用数组,利用默认对象
九、数组类型(最重要)
- 用 [1,2] 表示
- 访问数组元素 arr[n]
- 添加元素:arr.push()
- 删除元素:arr.pop()
- 切片(截取部分元素):slice(start,end),不包括第end个元素,从0开始编号,返回新数组
- 合并:arr.concat(brr),返回新数组
- 替换 / 删除指定位置:arr.splice(start,需要替换元素数量,替换元素),替换元素可以为多个不写替换元素表示删除;如果替换元素为数组,使用 “ ...brrr ” 。
- 连接数组内容形成字符串:arr.join("分隔符"),分隔符可不写
- 遍历,迭代
- 二维数组:转一维数组,arr.flat()
十、逻辑判断if
- 不同类型的条件单独作为作为一个变量体现,最后再将相关条件叠加到if中,便于阅读,修改单个条件
- if可以进行多层嵌套
- 通过if(){}else if(){} else{} 实现多条件判断
function myPD(){ asSheet("业绩").Activate() //确保运行在对应工作表中 var startD=Range("h1").Value2 //找到工作表中开始日期 var endD=Range("h2").Value2 //找到工作表中截止日期 for(var i=2;i<=12;i++){ var num=Cells(i,2).Value2; //找到工作表中业绩数据 var d=Cells(i,1).Value2; //找到工作表中日期数据 var dayC=d>startD && d<endD; //时间条件 var numC=num>Cells(3,8) && num<Cells(4,8) ; //数值条件 if(dayC && numC){ //条件叠加,便于阅读,修改单个条件 Cells(i,3).Value2="GOOD"; }else{ Cells(i,3).Value2="LESS OR MORE"; } }; }
十一、循环语句for
- 快速取得数组:JSA.getNumberArray(起始数,结束数,间距),间距默认为1
- 随机打乱数组:JSA.shuffle(arr)
- break:跳出本次循环
- continue:直接进行下次循环,一般用if语句替代
- for of:一般用for each 替代
- while:主要用于结果不确定的循环,建议少用。查找不确定表格的行数RngUtils.endRow("a1")
- do while:先执行后判断
- for each:无数组的情况、遍历过程中无法退出,上述2种情况不能使用。练习——简写、含下标、多行操作、修改99乘法表。
十二、函数
- 函数→lambda函数(只内部使用)→匿名函数(内部只使用一次)→箭头(立即)函数
- 高级函数
var arr=[0,1,2,3,4,5,6,7,8,9] //some:任一元素满足条件,退出循环 var rs=arr.some(x=>x>5) //every:全部满足条件,true;任一元素不满足,就退出循环,返回false; var rs=arr.every(x=>x>5) //find:找到满足条件的元素本身,发现第一个后即退出循环 var rs=arr.find(x=>x>5 && x%2==1) //findindex:找到满足条件的元素的索引,发现第一个后即退出循环 var rs=arr.findindex(x=>x>5 && x%2==1) var rs=arr.reverse().findindex(x=>x>5 && x%2==1) //倒序查找,序号为length-n-1
十三、