ISO格式的日期、赋值、浅拷贝、深拷贝的区别

243 阅读2分钟
ISO格式的日期

ISO 是International Organization for standardization(国际标准化组织)的简称

😼在ES5中,如果日期采用连词线(-)格式分隔,且具有前导0或满足两位数时,JavaScript会认为这是一个ISO(格林尼治国际标准时的时区)格式的日期字符串,导致返回的时间是以UTC(国际协调时间,Universal Time Coordinated)计算的。其他格式的日期一律视为非ISO格式,采用本地时区(UTC+8)作为计时标准。 😼ES6中,规定凡是没有指定时区的日期字符串,一律使用用户所在的本地时区。 😼 日期字符串中 T代表后面跟的是时分秒 z代表的是与utc的偏移量。

image.png

赋值、浅拷贝、深拷贝的区别

个人理解 赋值针对的原始数据可以是基本类型和引用类型,深浅拷贝针对的只是引用类型

--和原数据是否指向同一对象第一层数据为基本数据类型原数据中包含子对象
赋值改变会使原数据一同改变改变会使原数据一同改变
浅拷贝改变会使原数据一同改变改变会使原数据一同改变
深拷贝改变会使原数据一同改变改变会使原数据一同改变
浅拷贝

含义:浅拷贝会先创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝,如果属性值是基本类型,拷贝的就是基本类型的值,如果属性是引用类型,拷贝的就是内存地址。

简单来说可以理解为浅拷贝只解决了第一层的问题,拷贝第一层的基本类型值,以及第一层的引用类型地址。

常见的浅拷贝

Object.assign({},obj);
let cloneObj = {...obj}; //扩展运算符 `Spread` 
Array.prototype.slice(); //返回的新数组也是一种浅拷贝
Array.prototype.concat(); 
深拷贝

含义:将一个对象从内存中完整的拷贝一份出来,从堆内存中开辟一个新的区域存放新对象,且修改新对象不会影响原对象

常用的深拷贝

JSON.parse(JSON.stringify(obj))
存在的问题
1.会忽略 undefined、symbol、function
2.不能解决循环引用的对象
3.不能处理正则