校招刷题群
高效刷题 迎战校招
校招精选试题
近年面笔经面经群内分享
Java刷题群 前端刷题群 产品运营群
首页 > js语言和框架 > 语法相关-操作符相关
题目

说一下深浅拷贝基础(数据类型)。

解答

【解析】

1.基础数据类型(值传递)

//基本数据类型的拷贝(复制copy) 深拷贝和浅拷贝

//前提:需要理解 值传递 地址传递 基本数据类型 值传递 number string boolean null undefined Sysmbol bigInt
// Number
a = 1.1;b = a;b = 2; console.log(a,b)
// String
a = 'hello';b = a;b = 3; console.log(a,b)
// Boolean
a = false;b = a;b = 'sss'; console.log(a,b)
// Undefined
a = undefined;b = a;b = false; console.log(a,b)
// Null
a = null;b = a;b = undefined; console.log(a,b)

2.复杂数据类型(地址传递)

//复杂数据类型(object) 的拷贝 地址传递 注意 常用的复杂数据类型包括:{} 、[] 、function(){} 、Date 、RegExp 、null(这个比较特殊)等

//1、我们依然用一的简单赋值(=)来进行一遍操作(赋值)
// 经过实践我们会发现:
// 1、当类型为{}、[]的时候,改变b的值,a也会跟着一起变化。
// 2、当类型为Date、function、RegExp的时候,a保持不变。
//总结:
//我们发现{}或者[]时,简单的赋值操作并不能实现它们的拷贝,只是改了b的指向,使a和b都指向同一个引用,随意改变一个,都会影响另外一个的值。

{}
a = {name: 'abc'};b = a;b.name = 'sss';
console.log(a,b)
// []
a = ['a','b','c'];b = a;b[1] = 'd';
console.log(a,b)
// function
a = function(){ alert('aaa'); };b = a;b = function(){ alert('bbb'); };
console.log(a.toString(),b.toString())
// Date
a = new Date('2018-10-11 00:00:00');b = a;b = new Date('1970-01-01 00:00:00');
console.log(a,b)
// RegExp
a = new RegExp('abc');b = a;b = new RegExp('aaa');
console.log(a,b)
C 0条回复 评论

帖子还没人回复快来抢沙发