链接: https://blog.csdn.net/lareinalove/article/details/79895760.
链接: https://blog.csdn.net/u013592575/article/details/95087953.
内置类型
内置类型分为基本类型和引用类型
基本类型(单类型)
1.number类型
- number类型包含整数和浮点数(浮点数数值必须包含一个小数点,且小数点后至少有一位数字);
- 浮点数小数点后均为0时,自动转换为整型;
- 浮点数最高精度为17位(浮点数计算误差问题);
- NAN属于number:
4.1. 非数字类型,特点:涉及到任何关于NaN的操作,都会返回NaN,而且NaN不等于自身;
4.2. isNaN()函数:用于判断是否是一个非数字类型,如果传入的参数是一个非数字类型,那么返回true,否则返回false。
let a = 'test'
let b = a/3
isNaN(b) //true
- 数值转换:
Number(),转型函数,可以用于任何数据类型
parseInt(),将值转换为整型,用的较多
parseFloat(),将值转换为浮点型
2.string类型
- 单双引号作用相同
- 字符串有length属性,可以取得字符串的长度 ( a.length )
- 字符串的值是不可变的,要改变一个字符串的值,首先要销毁原来的字符串,再用另一个包含新值得字符串区填充该字符串
- 字符串转换:
String(),转型函数,适用于任何数据类型(null,undefined转换后为null和undefined)
toString(),可以把一个逻辑值转换为字符串,并返回结果(null、undefined没有toString()方法)
区别:null和undefined没有toString()方法
3.Boolean类型
1.两个值:true & false
2. Boolean():转型函数,将某个值转换为Boolean类型
4.null类型
- null类型被看做空对象指针,只有一个值,即null值,所以在用typeof操作符去检测null类型的值得时候,结果是object类型
- 如果定义了一个变量,想在以后把这个对象当做一个对象来使用,最好将该对象初始化为null值
5.undefined类型
- 只有一个值,即undefined
- 如果声明了一个变量,但是未给变量初始化值,那么这个变量的值就是undefined
- 调用函数时,应该提供的参数没有提供,该参数等于undefined;
- 对象没有赋值的属性,该属性的值为undefined;
- 函数没有返回值,默认返回undefined。
6.symbol类型(ES6)
- Symbol 类型的对象永远不相等,即便创建的时候传入相同的值。因此,可以用解决属性名冲突的问题(适用于多少编码),做为标记。
- 这是 es6 新增的数据类型。
7.bigInt类型(chorme 67)
- Javascript 中的任意精度整数,可以安全存储和操作大整数。即始超出 Number 能够表示的安全整数范围。是 chrome 67中的新功能。
对象类型(引用类型)
object
-
ECMAjavascript中的对象是一组数据和功能的集合
-
对象可以通过执行new操作符后跟要创建的对象类型的名称来创建。创建object类型的实例并为其添加属性(或)方法,就可以自定义创建对象。
如:var o = new Object( ); object 的每个实例都有下列属性和方法: constructor:保存着用于创建当前对象的函数。(构造函数)constructor就是object(); hasOwnProperty(propertyName):用于检查给定的当前属性在当前对象实例中)而不是在实例原型中)是否存在。其中,作为参数的属性名(propertyName)必须以字稚串形式指定(例如:o.hasOwnProperty(“name”))。 isPrototypeOf(object):用于检查传入的对象是否是传入对象原型。 propertyIsEnumerable(propertyName):用于检查给定属性是否能够用for-in语句。与hasOwnProperty()方法一样,作为参数的属性名必须以字符串形式指定。 toLocaleString( ):返回对象的字符串表示,该字符串与执行环境的地区对应。 toString( ):返回对象的字符串表示。 valueOf( ):返回对象的字符串、数值或者布尔值表示。通常与toString( )方法的返回值得相同。 ECMAJS中object是所有对象的基础,因些所有对象都具有这些基本的属性和方法。
浅拷贝与深拷贝
链接: https://www.jianshu.com/p/cf1e9d7e94fb.
- 理解:
浅拷贝和深拷贝都只针对于引用数据类型,浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存;但深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。 - 根本区别:
是否真正获取一个对象的复制实体,而不是引用。
换言之,浅拷贝只复制对象的第一层属性、深拷贝可以对对象的属性进行递归复制。