一块儿学习JavaScript (4) 之变量、做用域和内存问题

由于博主没有系统的学习过前端基础知识,因此打算读一遍《JavaScript高级程序设计第三版》(如下简称“红宝书”)。
为了更深入地吸取知识,因此打算边看边记录下知识点和一些本身的见解,并写在这里和你们一块儿探讨探讨~前端

红宝书是一本很适合初级前端去看的书,第四版已经出了,然而由于穷(其实也由于不懂英文),仍是选择了第三版做为本次读物。本读书笔记按照书本的目录顺序进行记录,书的前三章主要讲的是 JavaScript 的起源简介还有一些基本的概念,在这里就先不赘述了,之后有机会必定补上。bash

第四章 变量、做用域和内存问题

基本类型和引用类型的值

  • 基本类型 (原始类型 / Primitive values)
    • String
    • Number
    • Boolean
    • null
    • undefined
  • 引用类型 (对象类型 / Reference values)

拓展:实际上在 ES6 中引入了一种新的原始类型 Symbol,表示独一无二的值。是 JavaScript 语言的第七种数据类型。函数

在书中介绍,基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象。学习

上述 String, Number, Boolean, null, undefined 这5种基本数据类型是按值访问的,由于能够操做保存在变量中的实际的值。spa

引用类型的值是保存在内存中的对象,而 JavaScript 不容许直接访问内存中的位置,也就是说不能直接操做对象的内存空间。在操做对象时,其实是在操做对象的引用而不是实际的对象。所以,引用类型的值是按引用访问的。设计

书中注:这种说法不严密,当复制保存着对象的某个变量时,操做的是对象的引用。但在为对象添加属性时,操做的是实际 的对象。——图灵社区“壮壮的前端之路”注code

动态的属性

定义基本类型和引用类型的方式是相似的:建立一个变量并为该变量赋值。 可是,当这个值保存到变量后,对不一样类型值能够执行的操做则截然不同。对于引用类型的值,咱们能够为其添加属性和方法,也能够改变和删除其属性和方法。但咱们不能给基本类型的值添加属性,尽管这样作不会致使任何错误。对象

var person = new Object();
person.name = 'Nick';
alert(person.name);     // 'Nick'
复制代码

以上代码建立了一个对象并将其保存在了变量 person 中。而后,咱们为该对象添加了一个名为 name 的属性,并将字符串 "Nick" 赋值给了这个属性。紧接着,又经过 alert() 函数访问了这个新属性。若是对象不被销毁或者删除,这个属性会一直存在。ip

var name = 'Nicky';
name.age = 12;
alert(name.age);     // undefined
复制代码

以上代码为字符串 name 定义了一个名为 age 的属性,并赋值为 12,但在下一行访问这个属性时发现返回的是 undefinded。这说明只能给引用类型动态地添加属性,以便未来使用。内存


未完……

相关文章
相关标签/搜索