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。