js语法中一些容易被忽略,但会造成严重后果的细节

1、Object.assign 实现的只是浅拷贝,jQuery的 $.extend(true,obj1,obj2) 可以深拷贝,或者自己实现深拷贝的方法deepCope方法网上很多。

一、复杂数据类型-“对象”的地址引用方式,不理解清楚,会造成多大的问题?!

复习一下基础概念(老司机略过):

      JS的数据可以分为简单类型(数字、字符串、布尔值、null和undefined)和 复杂数据类型(对象),主要的不同是:简单数据类型是栈内存直接引用,复杂数据类型是地址引用的,放在堆内存中,所以也叫引用类型(堆栈概念庞大,这里不讲,百度资料很多)。下边讲到的诸多问题的导火索,就是这个地址引用。

     这里不谈“js中一切皆对象”这个言论,因为数字、字符串、布尔值等貌似‘对象’,因为他们有用方法,但请看定义,【js中‘对象’是可变的键控集合】,很显然,数字、字符串等不满足,因为他们不可变,所以说,js中俗定意义来讲,能称满足对象属性的大众意义数据类型是:对象、数组、函数、正则。

     记住这四个家伙,他们都是地址引用,接下来的诸多场景,出现问题,他们都有份。

1、场景一:函数形参引用复杂类型,请小心赋值,会改变实参的哦

 

 

猜你喜欢

转载自www.cnblogs.com/liujinyu/p/9559189.html