JavaScript中的变量

  JavaScript作为一种弱类型编程语言,其变量也是松散类型的。但是,这样松散的缺少拘束的变量规则,总会出现很多问题,而事实上,JavaScript中的变量,其实是包含两种数据类型的值:基本类型值和引用类型值,下面就对于这两种形式的变量值进行区分。

  首先,要明确的一点是,变量只是一个容器,用来存放不同的值,所以说我们进行的所有操作,只是对存储在变量中的值的操作。先对这两种类型的值进行本质上的区分。第一、保存方式不同。基本类型的值只是一个单纯的字符串,它没有属性和方法(当然例如字符串的length属性,以及parseInt()方法等除外),我们指的其实就是我们不能给它们添加属性,而引用类型的值,实际上是一个对象(Object),它们不仅有自己的方法属性,我们还可以给它们添加属性,举个例子:

var oStudent = new Object();  //定义一个对象
oStudent.ID = ‘123456‘;  //给这个对象增加了一个属性alert(oStudent.ID);  //123456

  第二,操作访问方式不同。基本类型的值作为一个确切的数据段,所以说在我们的操作过程中,我们对它的访问方式是按值访问的,也就是说我们进行的任何操作,其实都是对变量中实际的值进行操作的,例如对它修改之后,它原来的值将会被销毁,不复存在。而引用类型的值则与值不同,因为它是一个保存在内存中的一个对象,而JavaScript规定不允许我们直接访问内存地址中的对象,在操作对象的时候,实际上是在操作一个对象的引用,而不是对象本身,我们也可以将其理解为一个类似于指针的东西。

  第三、复制方式不同。从第二点不同,其实我们可以知道,如果要复制一个变量,基本类型的值也是互不干扰的,所以说复制的变量为一个新的变量,和原来的没什么关系,例如 var String1 = "Hello World"; var String2 = String1; 这个时候String1和String2是相互独立的两个变量,你可以改变String2的值,String1也不会受到影响。而引用类型的值则是不一样的,当从一个引用类型的变量向另一个变量复制的时候,也会将存储在变量中的值复制一份放在新变量的内存空间中,但是,这并不是完完全全地复制一份全新的东西出来,而仅仅是一个指针,这个指针还是指向于存储中的对象,这其实就相当于复制完成后,两个变量引用着同一个对象,这个时候,你改变其中的一个值,另外一个变量的值也会改变。我们举个例子,引用类型的值就相当于森林中有一个大宝藏,我们有两份相同的藏宝图分别给了两个人,当其中的一个人率先取得宝藏之后,另外一个人也就只能无功而返了,这中间,两份藏宝图是一模一样的,就相当于复制过的两个变量,而这两份藏宝图指向一个共同的值,那就是一份只此一家的宝藏。我们回到前面那个例子,可以实践一下:

var oStudent = new Object();  //定义一个对象
var oStudent1 = oStudent;      //复制一个相同的对象
oStudent.ID = ‘123456‘;  //给这个对象增加了一个属性
oStudent1.ID = ‘12345678‘;        //oStudent1修改了ID属性的值
alert(oStudent.ID);  //再获取oStudent的ID,会不会发生变化呢?

  当然结果和我们想象的一样,oStudent的ID同时也被修改了。

  看完基本类型的值和引用类型的值的区别,我们当然要了解一下JavaScript中有哪些基本类型的值,又有哪些引用类型的值。在JavaScript中,共有五种基本类型的值,分别是:Undefined、Null、Boolean、Number和String。而引用类型的值就是一个对象,在JavaScript中,将这些引用类型的值进行数据和功能的封装,形成了一些方便的引用类型,常见的有:Object类型、Array类型、Date类型、RegExp类型、Function类型。当然,我们在后面会一一详细了解。

时间: 2024-07-29 03:26:11

JavaScript中的变量的相关文章

JavaScript 中对变量和函数声明的提前示例

如题所示,看下面的示例(可以使用Chrome浏览器,然后F12/或者右键,审查元素.调出开发者工具,进入控制台console输入)(使用技巧: 控制台输入时Shift+Enter可以中途代码换行) var name = "xiaoming"; (function(){ var name = name || "小张"; console.info(name); })();// 小张 (function(){ name = name || "小张";

JavaScript中的变量在内存中的具体存储形式

栈内存和堆内存 JavaScript中的变量分为基本类型和引用类型 基本类型是保存在栈内存中的简单数据段,它们的值都有固定的大小,保存在栈空间,通过按值访问 引用类型是保存在堆内存中的对象,值大小不固定,栈内存中存放的该对象的访问地址指向堆内存中的对象,JavaScript不允许直接访问堆内存中的位置,因此操作对象时,实际操作对象的引用 结合代码与图来理解 let a1 = 0; // 栈内存let a2 = "this is string" // 栈内存let a3 = null;

一篇文章带你了解JavaScript中的变量,作用域和内存问题

作者 | Jeskson 来源 | 达达前端小酒馆 1 在JavaScript中的变量分别区分为两种: 一种为基本类型值,一种为引用类型值. 基本类型值指的是简单的数据段 引用类型值为可能由多个值组成的对象 引用类型的值是保存在内存中的对象,JavaScript不允许直接操作对象的内存空间,实际上操作对象的引用而不是实际对象. var dada = new Object(); undefined dada.name = "dada"; "dada" console.

JavaScript 中对变量和函数声明的“提前(hoist)”的那些事儿

变量声明“被提前” JavaScript 的语法和 C .Java.C# 类似,统称为 C 类语法.有过 C 或 Java 编程经验的同学应该对“先声明.后使用”的规则很熟悉,如果使用未经声明的变量或函数,在编译阶段就会报错.然而,JavaScript 却能够在变量和函数被声明之前使用它们.下面我们就深入了解一下其中的玄机. 先来看一段代码: (function() { //ReferenceError: noSuchVariable is not defined console.log(noS

javascript中的变量、作用域和内存问题

[变量][1]定义:可变的量,相当于给一个不定的数据起了一个外号.变量是存储信息的容器.[2]特性:js中的变量是松散类型的,可以保存任何类型的数据.它只是在特定时间用于保存特定值的一个名字而已.由于不存在定义某个变量必须要保存何种数据类型值的规则,变量的值及其数据类型可以在脚本的生命周期内改变.[3]变量声明:变量可以在声明时赋值,但不能有其他操作,如+=.-=等 var a = 2;//是正确的 var a += 2;//是错误的 var a = 2++;//是错误的,++只能用于变量,不能

(转)JavaScript 中对变量和函数声明的“提前(hoist)”

变量声明“被提前” JavaScript 的语法和 C .Java.C# 类似,统称为 C 类语法.有过 C 或 Java 编程经验的同学应该对“先声明.后使用”的规则很熟悉,如果使用未经声明的变量或函数,在编译阶段就会报错.然而,JavaScript 却能够在变量和函数被声明之前使用它们.下面我们就深入了解一下其中的玄机. 先来看一段代码: (function() { //ReferenceError: noSuchVariable is not defined console.log(noS

JavaScript中的变量及数据类型

转自:http://blog.csdn.net/mygis2005/article/details/7375419 JavaScript是一种弱类型的语言,变量名.操作符和方法名都区分大小写. 1.变量定义 在JavaScript中,使用var来定义任何类型的变量,每一个变量只是用于保存数据的占位符. [javascript] view plaincopy var temp;   //这句代码定义了一个变量,但其类型是未知的,可以存放任何类型的值,没有初始化的时候,test中存储是undefin

javascript中对变量类型的判断

本文正式地址:http://www.xiabingbao.com/javascript/2015/07/04/javascript-type 在JavaScript中,有5种基本数据类型和1种复杂数据类型,基本数据类型有:Undefined, Null, Boolean, Number和String:复杂数据类型是Object,Object中还细分了很多具体的类型,比如:Array, Function, Date等等.今天我们就来探讨一下,使用什么方法判断一个出一个变量的类型. 在讲解各种方法之

简单谈一谈JavaScript中的变量提升的问题

1,随笔由来 第一天开通博客,用于监督自己学习以及分享一点点浅见,不出意外的话,应该是一周一更或者一周两更.  此博客所写内容主要为前端工作中遇上的一些问题以及常见问题,在此基础上略微发表自己的一点浅见,如有出现错误,请看到的各位能够不吝赐教,此致谢意. 前几天在某技术群中水的正欢,忽然有群友提出了一个问题,虽然不难,卻是常人忽视的点,且出现次数较多,所以在此写一点东西,提醒一下自己. 2,JavaScript中的var 与 function 首先我们来看下面这个demo var f = fun