JavaScript中的原始值和复杂值
前面的话。
javascript的数据类型可以分为两种:原始类型和引用类型。原始类型也叫基本类型或简单类型,javascript基本数据类型包括Undefined、Null、Boolean、Number和String,引用类型也叫复杂类型,在Javascript中就是Object。相应地,它们的值也分别称为原值和复值。
特点
原始值。
简单来说:原始值是固定且简单的值,是存储在堆栈中的简单数据段,也就是说,它们的值直接存储在变量访问的位置。
原始值是Javascript中可用的最低或最简单的数据或信息形式。基元类型的值被称为基元值,因为它们是不可分割的。也就是说,数字是数字,字符是字符,布尔值是真还是假,null和undefined是null和undefined。这些值本身很简单,不能表示由其他值组成的值。
原始类型有哪些?
有五种基本类型: undefined、null、boolean、number和string。
我们可以用类型来判断一个人是否属于某一类型。
运算符的类型
对变量或值使用typeof运算符将返回以下值之一:
注意:
1.返回值是字符串类型。
2.与原类型相比,它仍然是一个null,这是相当特殊的。使用了typeof(null)并返回“object”。我们将null理解为对象的占位符。
复值
复杂值可以由许多不同类型的javascript对象组成。内存中复杂对象的大小是未知的,因为复杂对象可以包含任何值,而不是特定的已知值。
存储模式
堆栈存储器
由于原值占用固定空间,是一个简单的数据段,为了提高变量的查询速度,将其存储在堆栈中。
堆存储
因为复值的大小会发生变化,所以不能存储在堆栈中,否则会减慢变量的查询速度,所以存储在堆中,变量中存储的值是指向存储对象的内存的指针。
存取方式
按值访问
原始值作为非粒度值存储和操作,引用它们将会传递它们的值。
var myString=' foovar myStringCopy=myStringvar myString=nullconsole.log(myString,MyStringCopy);//null,“foo”引用访问。
复杂值是通过引用而不是实际值来存储和操作的。创建包含复杂对象的变量时,其值是内存中的引用地址。引用复杂对象时,使用其名称(即变量或对象属性)通过内存中的引用地址获取对象的值。
var myObject={ };var copyOfMyObject=myObject//复制了引用myObject.foo='bar '而不是值;//操作myObject//中的值现在,如果输出myObject和copyOfMyObject,将输出foo属性,因为它们引用同一个对象console.log (myobject,copy of myObject);//对象{foo='bar'}比较方法。
原始值通过值进行比较,而复杂值通过引用进行比较。复数值只有在引用同一个对象时才相等(也就是说,它们有相同的地址)。即使包含同一对象的两个变量也不相等,因为它们不指向同一对象。
var price1=10var price2=10var price3=新数字(' 10 ');var price4=price3console . log(price 1==price 2);//true console . log(price 1==price 3);//false price 4=10;console . log(price 4==price 3);//true console . log(price 4===price 3);//false var objectFoo={ same : ' same ' };var ObjectBar={ same : ' same ' };console . log(object foo==object bar);//false var ObJect a={ foo : ' bar ' };var objectB=objectAconsole . log(ObJect a==ObJect b);//真正的动态属性。
对于复杂的值,您可以为它们添加属性和方法,也可以更改和删除它们。但是,属性和方法不能添加到简单的值中。
复杂值支持动态对象属性,因为我们可以定义一个对象,然后创建一个引用,然后更新该对象,所有指向该对象的变量都将被更新。一个新变量指向一个现有的复杂对象,该对象不会被复制。这就是为什么复杂的值有时被称为参考值。复杂值可以有任意多的引用,即使对象发生变化,它们也总是指向同一个对象。
var str=' teststr.property=trueconsole . log(str . property);//未定义的var ObJa={ property : ' value ' };var pointer1=objAvar pointer2=pointer1objA.property=nullconsole.log(objA.property,pointer1.property,pointer 2 . property);//null null null包装类型。
当原始值被用作构造函数创建的对象时,Javascript会将其转换为对象,这样就可以使用对象的属性和方法,然后对象属性将被丢弃并更改回原始值。
版权声明:JavaScript中的原始值和复杂值是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。