原始值和引用值
ECMAScript变量可以包含两种不同类型的数据:原始值和引用值。
原始值(primitive value)
就是最简单的数据,引用值(referen前端开发需要掌握什么技术ce value)
则是由多个值构成的对象。
在把一个值赋给变量时,JavaScript引擎必须确定这个值是前端开发原始值还是引用值。
原始值
Undefined,Null,Boolea前端开发工资一般多少n,Numbejavascript百炼成仙免费阅读r,String和Symbol。保存原始值的变量是按值(by value)
访问的javascript百炼成仙xff存储处理国家秘密的com.cn/tag/%e8%ae%a1%e7%ae%97%e6%9c%ba" target="_blank">计算机0c;因为我们前端开发软件操作的就是存储在变量中的实际值。
引用值
引用值是保存在内存中的对象。与其他语言不同,JavaScript不允许直接访问内存位置,因此也就不能直接操作对象所前端开发软件在的内存空间javascript权威指南。在操作对象时,实际上操作的是该对存储容量象的引用(reference)
而非实际的对象本身。为此,保存引用值的变量时按引用(by r前端开发是什么eferenc前端开发需要掌握什么技术e)
访问的。
注意,在很多语言中,字符串是使用对象表示的,因此被认为是引用类型。ECMAScript打破了这个惯例。
动态属性
原始值和引用值的定义方式很类似,都是前端开发软件创建一个变量,然后给它赋一个值。不前端开发过,在变量保存了这个值之后,可以对这个值做什么,则大有不同。对于引用值而言,可以随时添加前端开发工程师工作内容xff0c;修改和删除其属性和方法。比如,看下面的示例:
这里,首先创建了一个对象,并把它保存在变量person中。然后,给这个对象添加了一个名为name的属性,并给这个属性赋值了一个字符前端开发工程师串何小生
.在此之后,就可以访问这个新属性前端开发是什么xff0c;前端开发和后端开发有什么区别直到对象被销前端开发工程师工作内容毁或属性被显式的删除。
原始值不能有属性,尽管尝试给原始值添加属性不会报错,例如:
在此前端开发工资一般多少,代码想给字符串name定义一个age属性,并给该属性赋值26,紧接着在下一行,属性不见了。记住,只有引用值可以动态天价后面可以使javascript用的属性。
注意&前端开发需要掌握什么技术#xff0c;原始类型的初始化可以只使用原始字面量形式前端开发需要学什么。如果使用的是new
关键字,则JavaScript会创建一个Object
类型的实际,但其行为类似原始值。下面来看看这两种初始化方式的差异:
let name1 = '何小生' let name2 = new String('小何') name1.age = 26 name2.age = 27 console.log(name1.age) // undefined console.log(name2.age) // 27 console.log(typeof name1) // string console.log(typeof name2) // object 复制代码
复制值
除了存储方式不同,原始值和引用值在通过变量复制时也有所不javascript百炼成仙免费阅读同。在通过变量把一个原始值赋值到另一个变量时,原始值会被复制到新变前端开发软件量的位置。请看下面的例子:
let num1 = 5 const num2 = num1 复制代码
这里,num1包含数值5。当把num2初始化为num1时,num2也前端开发和后端开发有什么区别会得到数值5。这个值跟存储在num1中的5是完全独立的存储容量ff0c;因为它是那个值的副本。
这两个变量可以独立使用,互不干扰。这个过程如图所示:
在把引用值从一个变量赋给另一个变量时,存储在变量中的值也会被复制到新变量所在的位置。区别在于,这里复制的值实际上是一个指针,它指向存储存储单元在堆内存中的对象。操作完成后前端开发入门薪水f0c;两个变量实际上指向同一个对象,因此一个对象上面的变化会在另一个对象上反应出来,如下面的例子所示:
let obj1 = new Object() let obj2 = obj1 obj1.name = '何小生' console.log(obj2.name) // '何小生' 值已经被复制了 复制代码
在这个例子中,变量obj1保存了一个新对象的实存储处理国家秘密实行什么保护例。然后,这个值被复制到obj2,此时两个变量都指向了同一个对象。在给obj1创建属性name并赋值后,通过obj2也可以访问这个属性,因为它们都指向同一个对象。
如图,展示了变量与堆内存中对象之间javascriptdownload的关系
发表评论