js常用通用函数
数字:
num.toString(进制):把数字转换成字符串,可以定义进制(2-36)
JS字符串的函数(非全局函数) egg:str.function() 参考 地址1
查找:
indexOf(str,start) //查找某个字符串首次出现的位置,默认start=0,没有找到返回-1 eg:str.indexOf("hi")
lastIndexOf(str,start ) //同上,查找最后出现的位置
includes(str,start)//查找某个字符串是否存在,默认start=0,找到返回true,否则false
search( str/regexp ) //根据某个字符串或正则查找,返回其位置,没找到返回-1;egg:str.search(/aaa/i)
match(regexp )//根据正则查找,返回匹配到的数组,没找到返回null,可用于忽略大小写查找/reg/i、全部匹配/reg/g,不加g则一次匹配、统计出现次数;egg:str.match(/aaa/gi)
截取:
substr(start,length)//从位置start开始,截取length长度的字符串,start可以为负数,如果不传递length,表示截取到结尾。egg:str.substr(2,3)
slice(start,[end])//截取位置start和位置end之间的字符串,返回内容包含start但不包含end, end可以为负数,如果不传递end,表示截取到结尾。egg:str.slice(1,5)
substring(start,[end])//同上,但end不支持负数
替换:
replace(str/regexp,newvalue)//把某个字符串 或 根据正则匹配,替换成新的字符串,egg:str.replace(/aa/gi, "bb"),当使用正则表达式的时候,replace有一个常用的方式:replace(正则,function(item){return item});
toUpperCase() //把全部字符串转换为大写,egg:str.toUpperCase()
toLowerCase() //把全部字符串转换为小写,egg:str.toLowerCase()
trim() //去除字符串头尾空白符(空格、制表符、换行符),egg:str.trim()
其他:
split(separator,[limit])//根据分隔符分割数组,limit限制数组长度,如果str.split(""),则返回str的数组
charAt(n) // 返回指定位置的字符,同 str[n]
length //属性,获取字符串长度:str.length
js数组函数: (非全局函数) egg:str.function() 参考 地址1
创建:
var arr = new Array("aa", "bb", "cc"); //new
var arr = [ "aa", "bb", "cc" ]; //字面量创建
查找:
includes(item, start) //判断一个数组是否包含一个指定的值。egg: array.includes('a')
indexOf(item,start) //搜索数组中的元素,并返回它所在的位置,没找到返回-1。egg: array.indexOf('a')
lastIndexOf(item,start) //搜索数组中的元素,并返回它最后出现的位置。
slice(start, end) //选取数组的的一部分,并返回一个新数组。egg: array.slice(1,3)
添加、删除、修改元素:
shift() //把数组的第一个元素从其中删除,并返回第一个元素的值。egg : array.shift()
unshift(item1,item2, ..) 向数组的开头添加一个或更多元素,并返回新的长度。egg: array.unshift('a','b')
pop() 方法用于删除数组的最后一个元素并返回删除的元素。 egg: array.pop()
push(item1, item2, ...) //向数组的末尾添加一个或更多元素,并返回新的长度。egg: array.push('a','b')
splice(index,delnum,item1,.....,itemX) //从数组中删除或插入元素,第1个参数起始位置,必填,其他选填,第2个元素要删除的个数,第3个往后参数是要插入的元素,egg: array.splice(0,2)//删除前俩个元素;array.splice(2,0,'a','b')//从第3个元素插入a、b;注意这是函数是对原数组操作,不是返回副本;
fill(value, start, end) //使用一个固定值来填充数组。egg: array.fill('aa',2,5)
concat(array2,array3,...) //连接两个或更多的数组,并返回结果。egg: array1.concat(array2)
遍历:
every(function(currentValue,index,arr), thisValue) //检测数值元素的每个元素是否都符合条件,只要有一个元素不满足,返回 false,否则返回true。egg: array.every(funName)
some(function(currentValue,index,arr),thisValue) //检测数组元素中是否有元素符合指定条件,只要有一个元素满足,返回 true,否则返回false。
map(function(currentValue,index,arr), thisValue) //通过指定函数处理数组的每个元素,并返回处理后的数组。
forEach(function(currentValue,index,arr), thisValue) //数组每个元素都执行一次回调函数,无返回值。
filter(function(currentValue,index,arr), thisValue) //过滤数值元素,并返回符合条件的元素的数组。
reduce(function(total, currentValue, currentIndex, arr), initialValue) //将数组元素计算为一个值(从左到右),返回计算结果。
reduceRight(function(total, currentValue, currentIndex, arr), initialValue) //同上(从右到左)。
排序:
sort(sortfunction) //对数组的元素进行排序,egg: array.sort(function(a,b){return a-b}),sortfunction通过返回正负零,来表示比较结果。
reverse() //反转数组的元素顺序, egg: array.reverse()。
其他:
isArray() //判断对象是否为数组,返回true false。egg:array.isArray()
toString() //把数组转换为字符串,并返回结果,注意数组元素之间用逗号隔开。egg: array.toString();
join(separator) //把数组的所有元素放入一个字符串。egg:array.join(',')
length 属性,数组的长度,egg: array.length;
url编码函数:encodeURI不会对本身属于URI的特殊字符进行编码,例如冒号、正斜杠、问号和井号;而encodeURIComponent则会对它发现的任何非标准字符进行编码,对于js编码的参数,php使用urldecode解码;
特殊用法:
1、问号点(?.)
一般访问res.data.code时,我们通常会:if( res && res.data &&res.data.code ){ let code = res.data.code }
如果使用问号点操作符,就可以简化为:let code = res?.data?.code; 还可以再优化,设置默认值:let code = res?.data?.code || -1 ;
如果键为变量,也可以使用,egg:let key = "code"; let code = res?.data?.[key];
2、双问号(??)
let a = value1 ?? value2; 表示只有value1为null或者 undefined 时取value2,相对于:let a = value1 || value2 ;
关于遍历:
基本:for、while
遍历数组:
array.map(item=>{ return item;}) //需要返回值,返回一个新数组,
arr.forEach((value, key) => { //无返回值,不需要return,可以在循环中直接修改原数组
arr[key] = value * value;
});
遍历对象:
for(let key in obj){ console.log( obj[key] ); }
for(let value of obj){....} //es6新增for-of,既能遍历对象(只有值),又能遍历数组
日期:
var d = new Date(年,月,日,时,分,秒)
var d = new Date(79,5,24,11,33,0)
var str = new Date().format("yyyy-MM-dd hh:mm:ss")
var str = new Date().format("yyyy年MM月dd日hh小时mm分ss秒")
getTime()返回距 1970 年 1 月 1 日的毫秒数,egg: new Date().getTime()
Math 对象方法:
Math.floor(1.6) 向下取整
Math.ceil(1.2) 向上取整
Math.round(2.5) 把一个数字舍入为最接近的整数
Math.random() 返回介于 0(包含) ~ 1(不包含) 之间的一个随机数。egg: Math.floor((Math.random()*100)+1) 取得1 到 100 之间的一个随机数
全局函数:
isNaN(value) 检查其参数是否是非 数字值,egg: isNaN("Hello")
parseFloat(string) 把一个字符串转换为浮点数,egg:parseFloat("1.55");
parseInt(string, radix) 把一个字符串转换为整数,radix该值介于 2 ~ 36 之间,表示几进制,默认10,egg:parseInt("1.55")
encodeURI("?a=5&c=6") //把url字符串进行编码;decodeURI(str); //把已编码的字符串进行解码;
encodeURIComponent("?a=5&c=6") //把URL字符串进行编码(常用),decodeURIComponent(str) //把编码字符串解码;
encodeURI和encodeURIComponent区别是,后者可对 ;/?:@&=+$,# 特殊字符编码,而encodeURI则不会;
正则表达式:
test(string) 检测一个字符串是否匹配某个模式,egg: /^1[3456789]d{9}$/.test(str)
exec(string) 检索字符串中的正则表达式的匹配,如果字符串中有匹配的值返回该匹配值,否则返回 null。egg: /Hello/g.exec(str)
JSON:
JSON.stringify(数组或对象)
JSON.parse(有效的json字符串)
js对象:既像map一样,有键值对,又像类一样,有方法;
俩种创建方式: 通过字面量创建: var person = { name:"小明", age:18, like:function(){ return "喜欢打篮球,弹吉他"; } } 通过new创建: var person=new Object(); person.name="小明"; person.age=18; person.show=function(){ return this.name+this.age; }
ES6:
新增加两个变量定义: let 和 const;
新增俩个类型:Map和Set;
说明:
Map 和 Object 的区别, Map 的键可以是任意类型,Object 的键只能是字符串或者 Symbols(符号);
Set 对象存储的值总是唯一的,往往用来去重;
映射Map: var myMap = new Map(); //创建 myMap.set("aa", "1111"); //添加 myMap.set("bb", "2222"); myMap.get("aa"); //获取 let isHas = myMap.has(key); //根据键,判断是否存在值
let length = map.size; //长度
for ( let [key, value] of myMap ) { //遍历 console.log( key + " = " + value ); } 集合Set: let mySet = new Set(); //创建 mySet.add(1); //添加 mySet.add(5);
let isHas = mySet.has(value); //判断是否存在某值
新增Class类,有constructor、extends、super,本质上是语法糖;
箭头函数:
var f = v => v;
var f = (a,b) => a+b;
var f = (a,b=5) => { //ES6 中允许你对函数参数设置默认值
let result = a+b;
return result;
}
扩展运算符 spread:
console.log(...[1, 2, 3]);
let [a, ...b] = [1, 2, 3]; //b = [2, 3]
let args = [0, 1, 2];
let f = (x,y,z)=> x+y+z ;
f(...args);
let person = { name: "Amy", age: 15 };
let someone = { ...person }; //{name: "Amy", age: 15}
Array增加方法:有every、some、forEach、filter、indexOf、lastIndexOf、isArray、map、reduce、reduceRight方法;
字符串模板:使用``反引号,可放入变量
let innerHtml = `<ul>
<li> ${name} </li> //变量
<li> ${age+1} </li> //运算
<li> ${ func() } </li> //函数
</ul>
`;
Promises:处理异步操作的对象
备注:Promise 异步操作有三种状态:
resolved:已完成,这时会调用 onFulfilled;
rejected:已失败,,此时会调用 onRejected;
pending:进行中,既不是resolve也不是reject的状态,也就是promise对象创建后的初始化状态;
已经实例化过的 promise 对象,可调用 then() 方法,传递 onResolved(成功回调方法) 和 onRejected(失败回调方法) 方法作为回调:promise.then(onFulfilled, onRejected);
let p = new Promise((resolve, reject) => { if(flag==1){ resolve(1); } if(flag==0){ reject(0); } }); p.then( function(res) { console.log(res); },function(err) { console.log(err); });
关于then的返回值:
如果返回的是一个普通值(数字/字符串/普通对象),或者不返回数据(返回ndefined) 时 ,then()方法返回的是一个状态为Fulfilled状态的promise对象,那么这个返回值,会作为promise的resolve的值传递出;
如果返回的是一个Promise,返回值就是Promise里的resolve或者reject的值;
关于复制:数组和对象的赋值是传递的引用,而不是另外创建了一个副本,此时一个改变,另一个也会改变,如果要避免这种情况,就需要深拷贝,就是额外创建一个副本,而不是传递引用。
深拷贝方法:简单类型的:newobj = Object.assign({},newobj,obj); 复杂的类型:newobj = JSON.parse(JSON.stringify(obj)); 一维数组:arr1 = [...arr2];
方法:Object.assign
let target = {a: 1};
let object2 = {b: 2};
let object3 = {c: 3};
Object.assign(target,object2,object3);
target; // {a: 1, b: 2, c: 3}
E5 和 E6 模块的导入、导出:
导入
Es5:需要先使用require导入React包,成为对象,再去进行真正引用;
Es6:可以使用import方法来直接实现系统库引用,不需要额外制作一个类库对象;
导出
Es5:要导出一个类给别的模块用,一般通过module.exports来实现,引用时,则依然通过 require方法来获取;
Es6:可以使用用export default来实现相同的功能,使用import方法来实现导入;
异步:async/await,ES7中的新增,简洁的异步调用,处理异步编程的最终方案,注意async await是基于Promise实现的,是改良版的Promise
async function helloAsync( url ){
let res = await ajax( url ); //await 跟一个 Promise 异步对象,如果不是会自动转化为promise对象,等待 Promise返回结果后,才会继续往下执行;
console.log(res);
}
1、async函数会隐式地返回一个promise对象,因此可以使用then方法,该promise的reosolve值就是函数return的值;
2、await命令只能用在async函数中,用在普通函数中会报错;
TypeScript:https://www.cnblogs.com/feiying100/p/16687907.html
浙公网安备 33010602011771号