JavaScript变量相关问题 2023-08-17 17:44 387阅读 0赞 本文重在探讨JavaScript变量包含的两种不同数据类型的值——基本类型值和引用类型值的区别。在此外稍微带过ECMAScript和JavaScript的关系。 题为JavaScript变量,但更具体的说应该是ECMAScript变量。 二十世纪九十年代,Netscape公司和微软公司推出了两个不同版本的JavaScript,不利于JavaScript的开发和使用,促使欧洲计算机制造商协会(ECMA,European Computer Manufacturers Association)着手处理JavaScript的标准化问题,从而完成了著名的 ECMA-262——定义了一种名为ECMAScript的新脚本语言的标准。 一个完整的JavaScript实现包括ECMAScript,文档对象模型(DOM,Document Object Model),以及浏览器对象模型(BOM,Browser Object Model)。ECMAScript作为JavaScript的核心以及实现的基础,是ECMA-262标准规定的在语法、类型、语句、关键字、保留字、操作符和对象这几个方面内容的语言的描述。 ECMA-262标准规定的ECMAScript变量是松散类型的,可以用来保存任何类型的数据,所以不同类型初始化变量的操作可以放在一条语句中执行,如下列代码是合法的。 1 var message = "hello", //string 2 age = 20, //number 3 found = false; //boolean 用 var 操作符定义的变量将成为定义该变量的作用域中的局部变量,退出该作用域后变量会被立即销毁。例如在函数内定义一个变量,当函数被调用的时候,该变量即被创建,但在函数退出后,该变量将无法再被继续访问。 ECMAScript中有6种数据类型(也只有6中,ECMAScript不支持任何创建自定义类型的机制)。 其中基本数据类型包括5种——underfined、null、boolean、number、string,这5种基本数据类型按值访问,其值属于文章开头提到的基本类型值,是简单的数据段,可以操作保存在变量中的实际的值。 第6种为复杂数据类型——object,本质上是由一组无序的名-值对组成的,属于引用类型值,是保存在内存中的对象。JavaScript不允许直接操作对象的内存空间,在操作对象时实际是在操作对象的引用而不是实际的对象。 虽然定义变量时不需要规定其为何种数据类型,但基本类型和引用类型的值可以执行的操作还是大相径庭。 ** 属性的添加** 对于引用类型的值,可以为其属性和方法进行添加、改变和删除,如下列代码: var obj = new object(); //创建对象并保存在obj中 obj.name = "Marry"; //添加名为name的属性,赋予字符串值“Marry” alert(obj.name); //弹出"Marry" 如果obj对象不被销毁或者name属性不被删除,这个属性将一直存在。 再看基本类型值: var name = "Marry"; //创建字符串 name.age = 20; //添加名为age的属性,赋予number值20 alert(name.age); //弹出"underfined" name字符串被添加了一个age属性,为其赋值20,但下次访问时这个属性就不见了。 这说明只能给引用类型值动态地添加属性。 **复制变量值** 从变量a向变量b复制基本类型的值,会在变量b对象上创建一个新值,将该值复制到给变量a分配的位置上,独立保存。这两个变量参与的任何操作都不会互相影响。 若从变量c向变量d复制引用类型的值,同样会将存储在变量d对象中的值复制一份放到为变量c分配的空间中,但这个值的副本实际是一个**指针**,与变量d指向堆内存中的同一个对象。两个变量实际引用同一个对象,改变其中一个变量,将影响另一个变量。 具体区别见如下例子: //基本类型值 var num1 = 5; var num2 = num1; num2 = num2 + 5; alert(num1); //5 alert(num2); //10 //引用类型值 var obj1 = new object(); var obj2 = obj1; obj1.name = "Marry"; alert(obj2.name); //"Marry" **函数传参** ECMAScript中所有函数的参数都是按值传递的,即将函数外部的值复制给函数内部的参数。鉴于基本类型值与引用类型值复制变量的不同,其函数传参的效果也不同。 在向参数传递基本类型值时,被传递的参数被赋给一个局部变量,函数内部参数的变化不影响函数外部的变量;向参数传递引用类型值时,会把这个值在内存中的地址复制给一个局部变量,因此这个局部变量的变化将会反映在函数的外部。如下列例子: //传递基本类型值 function addnum(num) { num += 10; return num; } var num1 = 5; var num2 = addnum(num1); alert(num1); //5,无变化 alert(num2); //15 //传递引用类型值 function setage(obj) { obj.age = 20; } var obj1 = new object(); setage(obj1) alert(obj1.age); //20 在局部作用域中修改的对象反映在全局作用域中,很多人会以为这是按引用传递。但函数对象确实都是按值传递,见下列例子: function setage(obj) { obj.age = 20; obj = new object(); obj.age = 30; } var obj1 = new object(); setage(obj1) alert(obj1.age); //20 此例中在函数内部为obj重新定义了一个对象,且为其age属性重新赋值,但这一变化并未反映在函数外部,说明obj1 并不是按引用传递的。实际函数内重新定义的对象为局部对象,在退出函数后就会被立即销毁。 **检测类型** 基本类型值可以通过typeof检测,但typeof检测引用类型时只能返回object。所以为了知道某个值是什么类型的对象,ECMAScript提供了instanceof操作符,语法如下: result = variable instanceof constructor 如果变量是引用类型的实例,instanceof操作符就会返回true。 -------------------- 第一篇技术文,原本想放些实例,但想了想还是想还是从基础的东西开始记录。 时间也有些晚了,脑子不是很清楚((⊙o⊙)…),有错误和补充之处请多多指教(抱拳) 转载于:https://www.cnblogs.com/Livia-Peng/p/js\_variable.html
相关 TOP字句加SQL变量的相关问题 SQL Server数据库中的变量可以加载TOP字句之后,下文将对TOP字句加SQL变量的相关问题进行讨论,供您参考,希望对您学习SQL数据库有所帮助。 SQL Server 淡淡的烟草味﹌/ 2021年12月24日 04:55/ 0 赞/ 66 阅读
相关 JavaScript 变量 [2019独角兽企业重金招聘Python工程师标准>>> ][2019_Python_] ![hot3.png][] [声明一个变量,为它赋值,然后显示出来][Link 1] 谁借莪1个温暖的怀抱¢/ 2022年01月13日 23:55/ 0 赞/ 115 阅读
相关 JavaScript数据类型相关的问题(一) 1、undefined和null的区别? > undefined是定义未赋值; > null是定义了并将赋值为null; var a; consol 喜欢ヅ旅行/ 2022年02月02日 10:47/ 0 赞/ 59 阅读
相关 JavaScript变量 变量是用于存储信息的"容器" var x=5; var y=6; var z=x+y; ![70][] 与代数一样,Jav 系统管理员/ 2022年05月22日 10:49/ 0 赞/ 71 阅读
相关 利用javascript解决相关的数组问题 例题1:把1-10之间所有的奇数,放到数组中 方法一:为了防止索引值不依次排序和不从0开始,需重新定义一个变量j,代码如下: <script type="text/ 淡淡的烟草味﹌/ 2022年05月31日 08:38/ 0 赞/ 46 阅读
相关 Spring依赖注入static静态变量相关问题 1.Spring不支持依赖注入static静态变量 在springframework里,我们不能@Autowired一个静态变量,使之成为一个spring bean,例如 以你之姓@/ 2022年06月03日 08:40/ 0 赞/ 61 阅读
相关 JavaScript变量 变量 JavaScript的变量是松散类型的,他不像JAva那样具有很严格的定义规范,所谓松散类型就是可以用来保存任何类型的数据,换句话说,每个变量仅仅是保存值的一个引用而已 ゝ一纸荒年。/ 2022年08月09日 13:40/ 0 赞/ 61 阅读
相关 JavaScript变量 JavaScript变量 1. 变量声明规则 2. var 2.1 var声明变量 2.2 var变量作用域 2.3 拼搏现实的明天。/ 2022年12月20日 11:30/ 0 赞/ 20 阅读
相关 JavaScript 变量 JavaScript变量 变量的声明 JavaScript是一种弱类型的脚本语言,无论是数字、文本还是其他内容,统一使用关键字var加上变量名称进行声明,其中关键字 太过爱你忘了你带给我的痛/ 2023年01月17日 14:52/ 0 赞/ 25 阅读
相关 JavaScript变量相关问题 本文重在探讨JavaScript变量包含的两种不同数据类型的值——基本类型值和引用类型值的区别。在此外稍微带过ECMAScript和JavaScript的关系。 朱雀/ 2023年08月17日 17:44/ 0 赞/ 388 阅读
还没有评论,来说两句吧...