javascript相关
JS中的数据类型:
数值类型:
js中不区别整形和浮点,其中NaN是一种特殊的数值类型,当数据无法转化成数字类型的时候,就是返回NaN。
Var n1=18; Var n2=18.88 Var n3=1.81e5 Var n4=NaN (not a number) 表示这个值不是数字 parseInt(‘’123’) 返回123 parseInt(‘ABC’) 返回 NaN
字符串类型:
字符串拼接用 + 号
字符串中常用的方法:
|
.length |
长度 |
|
.trim() |
去空格 |
|
.trimLeft() |
去左空格 |
|
.trimRitht() |
去右空格 |
|
.charAt(n) |
返回第n个字符 |
|
.concat(value1,value2) |
拼接 |
|
.indexOf(substring,start) |
子序列位置 |
|
.substring(n,m) |
根据索引获取子序列 |
|
.slice(start,end) |
切片 |
|
.toLowerCase() |
小写 |
|
.toUpperCase() |
大写 |
|
.split(n,m) n是以什么分割,m限制返回列表的元素个数 |
分割 |
布尔类型:
true和false均为小写.
" " ,null ,0, undefined ,NaN均为false
数组:类似与python中的列表 list
声明方式:
var a=[] 或则
var a =new Array('a','b')
常用方法:
|
.length |
数组的长度 |
|
.push(value1) |
尾部追加元素 |
|
.pop() |
删除尾部的元素 |
|
.unshift(value1) |
头部插入元素 |
|
.shift() |
头部移除元素 |
|
.slice(start,end) |
切片 |
|
.reverse() |
反转 |
|
.join(seq) |
将数组元素链接成字符串 |
|
Concat(val) |
拼接数组 |
|
.sort() |
排序(先将元素转成字符串,在按照ascii) |
for 循环遍历数组:
var a=[10,20,30,40];
for (var i=0;i<a.length;i++){console.log(a[i])}
undefined 和 null 的区别:
null表示变量的值是空的 undefined表示只是声明了变量,但是没有赋值
返回undefined var name 返回null var age=18
自定义对象:相当于python中的字典,但是在js中键不许要加双引号,如果是单引号默认会转成双引号
// 查找
// var person={"name":"dsfsd","age":38};
// console.log(person);
// console.log(person.name);
// console.log(person.age);
//
// for (var i in person){
// console.log(i);
// console.log(person[i]);
// }
//
// // 新增 new 关键字形式
// var per=new Object();
// per.name="dddddd";
// per.age="dsf";
// console.log('per.....',per);
流程控制:
if - else if -else:
var dd=15;
if (dd>5){
console.log("dd大于5");
}else if(dd<5){
console.log("dd小于5")
}else{
console.log("dd等于5")
}
switch case:
var ra=Math.random(0,1);
switch (true){
case ra<0.5:
console.log('ddd')
break;
case ra>0.5:
console.log('aaa');break;
default:
console.log('0.5');
}
一般情况下 swich 都是给出的定值
假如 var ra=1 或者var ra=2 这两种情况
switch (ra){
case ra=1:
console.log('ddd')
break;
case ra=2:
console.log('aaa');break;
default:
console.log('0.5');
}
但是需要注意的是 case后需要跟break 不然回执行下边的代码
for循环和while循环:
var a=[10,20,30,40];
for (var i=0;i<a.length;i++){console.log(a[i])}
var a = 0;
while (a < 10) {
console.log(a);
a++;
}
三元运算:同python中的三元运算符
var a=11; var b=22; var c=a>b?a:b 这里的 如果a大于b为真,则输出a。反之则输出b
函数:
定义是用function关键字
//定义函数
// function foo(a,b) {
// console.log(a);
// console.log(a+b);
// return a+b+b
//
// }
//调用函数
// 调用的时候,传入参数可以和定义的参数数量不一致可以不报错
// var re=foo(10) 返回结果 10+undefined+undefined----->NaN
// var re=foo(10,22)
// console.log(re)
//
// //匿名函数
// var func=function (a,b) {
// console.log("a--->",a);
// console.log("b---->",b);
// return a*b;
//}
// console.log("匿名函数--->",func(10,10));
// 立即执行函数
// var ab=(function (a,b) {
// console.log(a-b);
// return a+b;
// })(4,3);
// console.log(ab)
作用域:同python。
函数共有两个阶段,分别为定义阶段和调用阶段。
所以 ,函数找值的时候,会现在函数内部找,内部找不到,再往上层找,直到找到全局为止。
//闭包函数
// var city="Beijing";
// function f(){
// var city="Shanghai";
// function inner(){
// console.log(city);
// }
// return inner
// }
// var r=f()
// r()
此时打印的就是 shanghai
函数中的arguments关键字,代表函数内所有的参数
// arguments 代表函数内所有的参数
// function f1(a,b) {
// console.log(a,b);
// console.log(arguments);
// var rr=0;
// for (var i=0;i<arguments.length;i++){
// rr+=arguments[i]
// console.log('rr',rr)
// }
//
// }
// f1(11,22)
js中的词法分析:
js在调用函数的那一瞬间,会先进行词法分析
词法分析过程:
当函数调用的前一瞬间,会先形成一个激活对象:active object(ao),并会分析以下3个方面:
1 函数参数,如果有,则将此参数赋值给ao,且值为undefined。如果没有,则不做任何操作
2 函数局部变量,如果ao上有同名的值,则不做任何操作,如果没有,则将此变量赋值给ao
并且值为undefined
3 函数声明:如果ao上有,则会将ao上的对象覆盖,如果没有,则不做任何操作
// var age=18;
// function foo1() {
// console.log(age);
// var age=22;
// console.log(age);
//
// }
// foo1()
此时的打印结果是 undefined 22
// var age=18;
// function foo2(){
// console.log(age);
// var age=22;
// console.log(age);
// function age() {
// console.log('sdfsdf');
//
// }
// console.log(age);
// }
// foo2()
// 执行结果
// ƒ age() {
// console.log('sdfsdf');
//
// }
// 22
// 22
JS中的内置对象:
1 Date对象:
// 1 date对象
// var datatime=new Date()
// console.log(datatime)
// console.log(typeof datatime)
// // 字符串时间
// console.log(datatime.toLocaleString())
// console.log(typeof datatime.toLocaleString())
// 成成指定时间的date对象
// var d2=new Date("2020/2/8 14:46")
// console.log(d2.toLocaleString());//转成字符串格式的本地时间
// console.log(d2.toUTCString());//UTC时间
// var d2=new Date()
// //获取日
// console.log(d2.getDate());
// //获取星期
// console.log(d2.getDay());
// //获取月(0-11)
// console.log(d2.getMonth());
// //获取完整年份
// console.log(d2.getFullYear());
// //获取年
// console.log(d2.getYear());
// //获取小时
// console.log(d2.getHours());
// //获取分钟
// console.log(d2.getMinutes());
// //获取秒
// console.log(d2.getSeconds());
// //获取毫秒
// console.log(d2.getMilliseconds())
// //返回累计毫秒数(从1970/1/1)
// console.log(d2.getTime())
2 JSON对象:
// var str1='{"name":"at","age":189}';
// var str2={name:"age1","age":5525};
//
// // 字符串转json
// var json_str=JSON.parse(str1);
// console.log(json_str,typeof json_str);
// // json转字符串
// var str_json=JSON.stringify(str2);
// console.log(str_json,typeof str_json);
3 Math对象:
| abs(x) | 绝对值 |
| exp(x) | 返回e的指数(对数) |
| floor(x) | 对数进行下舍入 |
| log(x) | 自然对数 |
| max(x,y) | 最大值 |
| min(x,y) | 最小值 |
| pow(x,y) | x的y次方 |
| random(0,1) | 随机数,js中只能使用random(0,1)返回0到1之间的小数没有现成的方法返回更大的随机数 |
| round(x) | 把数四舍五入为最接近的整数 |
| sin(x) | 正弦 |
| sqrt(x) | 平方根 |
| tan(x) | 正切 |
4 RegExp对象:
js中的正则对象,在调用该方法时正则表达式不能为空,正则表达式后加g代表全局匹配,加i代表忽略大小写
创建方法:
第一种:
var reg1=new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}$");
第二种:
/^[a-zA-Z][a-zA-Z0-9_]{5,11}$/
test方法:
var reg1=new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}$");
var reg2=reg1.test('aaaa_2');
另外一种
另外一种
/^[a-zA-Z][a-zA-Z0-9_]{5,11}$/.test("aaaa_2");
js正则的坑;
坑一:
// 正则中{5,11}加入了空格 这样即使字符串符合匹配规则也报false
// var reg1=new RegExp("^[a-zA-Z][a-zA-Z0-9]{5, 11}$");
// // var reg2=reg1.test("aaaa_a")
// // console.log(reg2)
坑二:
//js中的正则坑二 当传入为空时 默认传入undefined
// console.log(/^[a-zA-Z][a-zA-Z0-9_]{5,11}$/.test(undefined));
// console.log(/^[0-9][a-zA-Z0-9_]{5,11}$/.test("undefined"));
// console.log(/^[0-9][a-zA-Z0-9_]{5,11}$/.test());
坑三:
// js中正则坑三
// 当正则表达式 使用了全局模式g的时候,并且还检测一个字符串
// 此时回引出一个lastindex的概念,lastindex会记住上一次匹配成功的位置
// 这也是为什么 下方打印了四次匹配结果 会出现true false true false的原因
console.log("=======================")
var r=/yuan/g;
console.log(r.test("yuan"));
console.log(r.lastIndex);
console.log(r.test("yuan"));
console.log(r.test("yuan"));
console.log(r.test("yuan"));
js如果使用replace替换的化,可以使用正则。
// 可以在替换中直接使用正则替换 g代表全部替换 i代表不区分大小写 // var ss="Alexddaiai"; // var s1=ss.replace(/a/gi,"uu"); // console.log(s1);
js是一个大佬花7天的时间写出来,本身很不完善,这些年一直在打补丁来解决bug。

浙公网安备 33010602011771号