JavaScript并没有避开数据类型,只是在声明时统一使用无类型(untyped)的“var”关键字而已,
它的数据类型是根据所赋值的类型来确定的。
一、基本数据类型(值)
String Number Boolean Null Undefined
特殊的原始值:null undefined,不是数字、字符串和布尔值,代表了各自特殊类型的唯一的成员。
除了数字、字符串、布尔值、null和undefined之外就是对象了,对象是属性的集合,每个属性都由“名/值对”构成,有一个特殊的对象-全局对象。
二、引用数据类型
Object
对象类型内含有:array(数组)、function(函数)这两种特殊对象还有其他object类型
JS中的变量都是保存到栈内存中的,基本数据类型的值直接在栈内存中存储,值与值之间是独立存在,修改一个变量不会影响其他的变量。
对象是保存到堆内存中的,每创建一个新的对象,就会在堆内存中开辟出一个新的空间,而变量保存的是对象的内存地址(对象的引用),如果两个变量保存的是同一个对象引用,当一个通过一个变量修改属性时,另一个也会受到影响
当比较两个基本数据类型的值时,就是比较值。
而比较两个引用数据类型时,它是比较的对象的内存地址,如果两个对象是一摸一样的,但是地址不同,它也会返回false
instanceof 运算符判断一个对象是否是另一个对象的实例。返回true或false
instanceof 运算符用来检测 constructor.prototype 是否存在于参数 obj 的原型链上(或者说:检测obj的原型链上是否存在constructor.prototype )