说明

JavaScript中变量、值、对象的理解。本文为了简化理解,前半部分暂时刨除与执行上下文的相关概念。另外本文是个人的见解,如有疑问或不正支持,欢迎提出指正和讨论!

目录

前言

参考来源

前人栽树,后台乘凉,本文参考了以下来源

变量与值

区分变量与值

和所有其它程序语言一样,JavaScript也有变量和值得概念

var a = 10; //a为变量,10为值(基本类型)
var b = {}; //b为变量,{}为值(引用类型)

  

如上述代码中,=号左侧的为变量,=号右侧的为值。

JS值的两大类型

前面提到了变量和值的概念,接下来对值进行简单的介绍

JavaScript的值分为两大类型:

  • 一类是基本数据类型(也称基本类型、原始型),只有五种(undefined,null,number,boolean,string)

    基本类型的特点是定义后是无法改变的,存放于栈内存中(可以把它当成常量来理解)

  • 一类是复杂数据类型(也称引用类型、对象型),只有一种

    引用类型的特点是定义后,值可以改变,栈内存中只存放变量标识符和指针,具体的数据存放与堆内存中(所以可以改变)

    Object.prototype可以理解为万物之母,其它的所有类型的对象都可以理解为是它产生的(如内置类型Array,Date等),另外有一个比较特殊的function类型(它的原型是Function.prototype,而实际上这个原型也是基于Object.prototype的,详情需要参考后边系列文章之原型)

  • 详情参考: JavaScript的数据类型

关于基本类型与引用类型的存储,可以用下图理解

  • 也就是说,上图中,如果变量1的值变为102,实际中栈内存中的101是不会变的,只是在栈内存中新开辟出一处,用来存放102这个常量。然后将变量1指向102。

  • 而变量2由于栈内存中存放的是指针,实际执行的是堆内存中的数据,所以变量2的值是可以随便改的(堆内存中的数据可以更改)

堆内存与栈内存的区别

上述有讲到堆内存与栈内存,那么这两者有什么区别呢?

  • 栈会在生命期自动分配,回收。速度更快。
  • 堆空间更大。由用户控制。通过引用计数来控制生命期。回收器来释放最终的堆空间

而且前面的基本类型与引用类型的堆、栈分配,可以如下理解:

  • 基本类型一般数据都小。所以用栈,速度快
  • 引用类型有计数,有堆来控制释放机制

值与对象

正如上文所讲,变量,值,与对象的关系总结如下

  • var 变量 = 值; //其中只有两种类型,一种是基本类型(类似于常量数据),一种是引用类型(对象)
  • 也就是说,=号左边的是变量,=号右边的是值,而值可以取两种类型,一种是基本类型(类似于常量数据,存于栈内存中),一种是引用类型(即对象,栈内存中存指针,指向堆内存)。

结合执行上下文理解

上述有对JavaScript的变量、值、对象进行讲解。接下来结合JS中的执行上下文进行深入的讲解。

敬请期待...

JavaScript筑基篇(一)->变量、值与对象的更多相关文章

  1. JavaScript筑基篇(二)->JavaScript数据类型

    说明 介绍JavaScript数据类型 目录 前言 参考来源 前置技术要求 JavaScript的6种数据类型 哪6种数据类型 undefined 类型 null 类型 boolean 类型 numb ...

  2. JavaScript筑基篇(三)->JS原型和原型链的理解

    删除理由:很久以前写的,当时理解不够深入,这样描述反而看起来更复杂了.因此就删掉,免得误人子弟! 可以看看另一篇文章:[如何继承Date对象?由一道题彻底弄懂JS继承.](http://www.cnb ...

  3. 【转】Javascript 中的false,零值,null,undefined和空字符串对象

    js 开发中经常会碰到判断是否为空的情况,关于 null 和 undefined 的区别了解的不是很好,刚好看见这篇文章,转过来学习一下,以下是转载正文: 在Javascript中,我们经常会接触到题 ...

  4. 二、JavaScript语言--JS基础--JavaScript进阶篇--JavaScript内置对象

    1.什么事对象 JavaScript 中的所有事物都是对象,如:字符串.数值.数组.函数等,每个对象带有属性和方法. 对象的属性:反映该对象某些特定的性质的,如:字符串的长度.图像的长宽等: 对象的方 ...

  5. 6、JavaScript进阶篇③——浏览器对象、Dom对象

    一.浏览器对象 1. window对象 window对象是BOM的核心,window对象指当前的浏览器窗口. window对象方法: 注意:在JavaScript基础篇中,已讲解了部分属性,windo ...

  6. 5、JavaScript进阶篇②——函数、事件、内置对象

    一.函数 1. 什么是函数 函数的作用,可以写一次代码,然后反复地重用这个代码. 如:我们要完成多组数和的功能. var sum; sum = 3+2; alert(sum); sum=7+8 ; a ...

  7. 开心菜鸟系列----变量的解读(javascript入门篇)

                       console.info(         console.info(window['weiwu'])          console.info(window. ...

  8. Javascript进阶篇——( JavaScript内置对象---上-Date,string,charAt,indexOf,split,substring,substr)笔记整理

    什么是对象JavaScript 中的所有事物都是对象,如:字符串.数值.数组.函数等,每个对象带有属性和方法.对象的属性:反映该对象某些特定的性质的,如:字符串的长度.图像的长宽等:对象的方法:能够在 ...

  9. Javascript 中的false,零值,null,undefined和空字符串对象

    在Javascript中,我们经常会接触到题目中提到的这5个比较特别的对象--false.0.空字符串.null和undefined.这几个对象很容易用错,因此在使用时必须得小心. 类型检测 我们下来 ...

随机推荐

  1. scroll(),scrollTop(),scrollBy()无效问题的总结

    · 使用的浏览器:Chrome(67.0.3396.87)/火狐(60.0.2)/IE(ie7和ie8),均为PC端. · 代码如下 表现结果: Chrome:只有第一次打开标签页面是有效的(在当前标 ...

  2. 【Django笔记一】windows系统下搭建Django项目

    一.环境版本信息: 操作系统:windows10 Django版本:2.0.5 Python版本:3.6.4 二.创建虚拟环境: 1.为什么要创建虚拟环境: 我们要开发一个新的项目,需要一套独立的Py ...

  3. 如何优雅的使用C语言绘制一只小猪佩奇

    今天我们来用C语言画一只小猪佩奇---社会.社会....在画小猪佩奇之前,我们先使用带符号的距离长 (signed distance field,SDF) 来画一个圆形. 使用这个方法表示形状,但是这 ...

  4. 竞赛题解 - Ikki's Story IV-Panda's Trick

    Ikki's Story IV-Panda's Trick - 竞赛题解 也算是2-sat学习的一个节点吧 终于能够自己解决一道2-sat的题了 ·题目 一个圆上有n个点按顺时针编号为 0~n-1 , ...

  5. Sass变量及嵌套

    1. 变量:SASS允许使用变量,所有变量以$开头. 变量声明:$highlight-color: #000; 注意:变量可以在css规则块定义之外存在.如下例子: $nav-color: #F90; ...

  6. Python入门 —— 06语音识别

    Python 语音 实现语音操控的原理 语音操控分为语音识别和语音朗读两部分 我们使用speech模块实现语音模块(python 2.7) SAPI是微软Speech API , 是微软公司推出的语音 ...

  7. JZ2440开发板:用按键点亮LED灯(学习笔记)

    本文是对韦东山嵌入式第一期学习的记录之一,如有您需要查找的信息,可以继续往下阅读. 想要用按键点亮LED灯,就需要知道按键和LED灯的相关信息,这样才可以进行之后的操作.阅读JZ2440的原理图,可以 ...

  8. vuejs中的生命周期

    vue中生命周期分为初始化,跟新状态,销毁三个阶段 1.初始化阶段:beforeCreated,created,beforeMount,mounted 2.跟新状态:beforeUpdate,upda ...

  9. 【blockly教程】第二章 Blockly编程基础

    2.1 Blockly的数据类型 2.1.1 数据的含义  在计算机程序的世界里,程序的基本任务就是处理数据,无论是数值还是文字.图像.图形.声音.视频等信息,如果要在计算机中处理的话,就必须将它们转 ...

  10. linux怎么把英文版火狐浏览器改成中文

    一.按alt打开菜单栏,点击help>about firefox查看自己的火狐浏览器版本 比如我的是52.4.0版本 二打开网址 http://ftp.mozilla.org/pub/firef ...