js常用方法(js基础,遍历,浅、深拷贝)

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" }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值