js常用方法(js基础,遍历,浅、深拷贝)
检测数据类型
typeof(),//基本数据类型
instanceof,//引用数据类型
数据类型转换
转成数字:
转换函数:parseInt,parseFloat//只对string类型有用。
强制类型转换:Number()//同理String(),Boolean()
利用JS弱变量类型转换:算数运算,’字符串‘-0;
字符串 操作方法
转换为字符串的方法:变量.toString()
查找位置:
charAt:返回指定位置,
indexOf:返回第一次出现的位置
split,转为数组
concat,连接多个字符串
slice,提取(独立复制)某部分
replace,替换
match,检索指定的值
search,检索指定的子字符串
数组操作方法
isArray,//判断为是否是一个数组
Array.from()//将字符串转换为数组
.jion()//连接,把数组中的所有数字连接成字符串,并返回
concat()//接两个或多个数组
slice(下标位置)//截取某部分
以上四个不会改变原数组
splice()//从数组中添加/删除项,并返回删除的项
reverse(),//反转
sort()//排序
push(),//在尾部添加,返回新长度
pop(),//尾部删除,返回删除项
unshift,//头部添加,返回新长度
shfit,//头部删除,返回删除项
数学方法
abs()//绝对值
ceil()//上舍入
floor()//下舍入
max()//取两个或多个数中的最大值
min()//取两个或多个数中的最小值
pow()//返回x的y次幂值
random()//生成0~1之间的随机数
round()//舍入为最接近的整数(四舍五入)
遍历方法
遍历对象方法:
1、for…in…,
for (var index in obj) {
console.log(‘key=’, index, ‘value=’, obj[index])
}
2、Object.keys(),//先转为数组,再遍历每一项
Object.keys(obj).forEach(function(index) {
console.log(index, obj[index])
});
遍历数组的方法:
1、forEach(function(两参数)),//forEach的参数是带两个参数的函数
eg:
var arr = [‘a’, ‘b’, ‘c’, ‘d’];
arr.forEach(function(value, index) {
console.log(‘value=’, value, ‘index=’, index);
})
2、for
3、for…in,
4、for…of,
5、array.map(),遍历数组的每一项
let arr = [12,23,24,42,1]; let res = arr.map((item, index, ary) => { return item*10; })
6、filter()//筛选数组,遍历符合的数组项
7、some,遍历每一项与另一个数进行判断,只要有一个存在,就返回true
8、every,遍历每一项进行比较,全部项都符合才返回true.
浅拷贝与深拷贝方法
浅拷贝与深拷贝是相对与引用类型来说的。假如一个变量复制了一个对象,改变变量的
属性值,被复制的对象的相应属性值也会改变,这是浅拷贝。深拷贝就是复制在之后,完全独立。
基本数据类型的名字和值都存储在栈内存中;而引用类型数据的名存储在栈内存中,值存储在堆内存中,但是栈内存的名保存着一个引用地址,这个地址指向堆内存中的值。
实现浅拷贝的方法:
Object.assign
for…in
直接用等于赋值
实现深拷贝的方法:
1、递归遍历所有层级的属性
function deepClone(obj){
let objClone = Array.isArray(obj)?[]:{};
if(obj && typeof obj==="object"){
for(key in obj){
if(obj.hasOwnProperty(key)){
//判断ojb子元素是否为对象,如果是,递归复制
if(obj[key]&&typeof obj[key] ==="object"){
objClone[key] = deepClone(obj[key]);
}else{
//如果不是,简单复制
objClone[key] = obj[key];
}
}
}
}
return objClone;
}
let a=[1,2,3,4],
b=deepClone(a);
a[0]=2;
console.log(a,b);
2、通过JSON的序列化stringify与反序列化parse
缺点是无法对对象中的函数实现深拷贝,会函数会变为undefined;
function deepClone2(obj) {
var _obj = JSON.stringify(obj),
objClone = JSON.parse(_obj);
return objClone;
}
3、使用第三方插件lodash函数库,_.cloneDeep(test)
let result = _.cloneDeep(test)
4、如果一个数组里的项都是基本数据类型,可以使用扩展运算符来实现深拷贝
// 当value是基本数据类型,比如String,Number,Boolean时,是可以使用拓展运算符进行深拷贝的
// 当value是引用类型的值,比如Object,Array,引用类型进行深拷贝也只是拷贝了引用地址,所以属于浅拷贝
var car = {brand: "BMW", price: "380000", length: "5米"}
var car1 = { ...car, price: "500000" }