js基本数据类型、深浅拷贝

1.js数据类型

  • 值类型:string、number、boolean、symbol、undefined
  • 引用类型:object、function、array、null

值类型和引用类型的区别:值类型的变量存储的是值,而引用类型的变量存储的是地址。当引用类型的赋值变量a赋值给另一个变量b,当b修改属性值的时候,a的值也会跟着改变。看例子:
引用类型:

var obj = {
		id: 1
	}
var newObj = obj
newObj.id = 2
console.log(obj,newObj) // 两个的id都会变成2

值类型:

var a = 1
var b = a
b=2
console.log(a,b) // 结果1,2

注:null为什么属于引用类型呢?因为可以把null看作一个空指针。

面试题:typeof能返回哪些类型?
答:对于值类型的都返回他本身的数据类型,而对于引用类型返回的是object。所以能返回的类型有:string、number、boolean、symbol、undefined、object

2.浅拷贝和深拷贝

浅拷贝和深拷贝一般都是对于引用数据类型(对象和数组)来说的。
浅拷贝:拷贝的是地址。比如你对a变量进行浅拷贝,当a变量身上的属性发生变化的时候,你也会变化。
深拷贝:拷贝的是值。即你对a变量进行深拷贝,a变量发生变化,也不会影响到你。

-浅拷贝

var obj = { id: 1}
var newObj = obj  // 浅拷贝

-深拷贝
方法一:
利用JSON.stringify方法,变成字符串,再利用JSON.parse变回来。这样就完成深拷贝了。

var obj = { id: 1}
var newObj = JSON.parse(JSON.stringify(obj)) // 实现深拷贝
console.log(newObj) // { id: 1}

方法二:
利用深度优先遍历。也可以叫递归吧。

var obj = {
		id: 1,
		name: 'wjg',
		detail: {
			address: '中国'
		},
		arr: [1,2,3,4,5]
	}
var newObj = deepClone(obj) 
console.log(newObj) // 和a的一样
function deepClone(obj) { // 实现深拷贝
	if(typeof obj !== 'object' || obj === null) {  // 递归的终止条件
		return obj
	}
	if(obj instanceof Array) { // 判断是数组还是对象
		var res = []
	} else {
		var res = {}
	}
	for(let key in obj) {
		if(obj.hasOwnProperty(key)) { // 防止出现原型链上的属性
			res[key] = deepClone(obj[key])
		}
	}
	return res
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值