javascript值和引用

时间:2022-12-15 18:38:48

JavaScript引用指向的是值。

简单值(即标量基本类型值,基本类型值,js中6类,null、undefined、boolean、number、string和symbol)总是通过值复制的方式来赋值/传递。

javascript值和引用

以数值为例,此时,变量a持有该值的一个复本,变量b持有他的另一个复本,不论b进行什么样的操作,也不再会影响a的值。

复合值——对象(包括数组和封装对象)和函数,则总是通过引用复制的方式来赋值/传递。

javascript值和引用

以数组为例,a和b分别指向同一个复合值[1,2,3]的两个不同引用,仅仅是指向,而非持有,所以如果a和b其中之一发生更改,其实他们更改的还是原数组,随后他们还是会指向更改后的新值[1,2,3,4]。

换一种操作b的方式:

javascript值和引用

此时,对b进行赋值操作,将另外一个数组赋值给b,b就不再是引用a的指向,并与a的指向值再没有任何关系,所以b的操作也不再影响到a指向的值。

函数参数经常让人产生困惑:

javascript值和引用

仅仅这样的操作,一般情况下,也都能理解。

javascript值和引用

这种情况下,就会产生各种困惑,利用前文所说的对复合值进行赋值操作,并不会对所引用目标值的值产生任何影响,即对x赋值[4,5,6],并不会对a所引用的数组的值产生任何影响,所以a依然为[1,2,3,4]。

javascript值和引用

此时在函数体中,没有进行任何赋值类的操作,x操作的一直都是数组的引用值,所以push新数值之后,就是对其所引用的值做了修改,a指向的也是更改后的新值[4,5,6,7]。

关于json对象的操作,原理与数组差不多。

简单标量基本类型值(字符串和数字等)通过值复制来赋值/传递,而复合值(对象等)通过引用赋值来赋值/传递。

javascript值和引用的更多相关文章

  1. PHP javascript 值互相引用(不用刷新页面)

    PHP javascript 值互相引用的问题   昨天通过EMAIL给一些公司投了简历,希望他们能给我一份工作,今天其中一家公司的人给我打电话,大意是要我做一点东西(与AJAX有关) 给他们看,我听 ...

  2. JavaScript数据操作--原始值和引用值的操作本质

    我的一句话总结:原始值不管是变量赋值还是函数传递都不会改变原值,引用值不管是变量赋值还是函数传递,如果新变量重新赋值,则不会影响原引用值,如新变量是直接操作,就会影响原引用值. 首先明确,值和类型是两 ...

  3. JavaScript | 值传递、引用传递的区别

    值传递 JavaScript值传递的数据类型:字符串(String).数字(Number).布尔(Boolean).空(Null).未定义(Undefined), 这五种数据类型是按值访问的,因为可以 ...

  4. Javascript参数传递中值和引用的一种理解

    值(value)和引用(reference)是各种编程语言老生常谈的话题,js也不例外. 我将剖析一个例子的实际运行过程,跟大家分享我对js参数传递中的值和引用的理解. 参考官网数据类型的两种分类,本 ...

  5. javascript原始值和引用值类型及区别

    原始值和引用值类型及区别 首先,原始值和引用值类型都是js中的数据类型,为了充分利用存储空间,定义了不同的数据类型,而且js是弱类型,动态语言,数据类型可变. 原始值(简单数据类型) 存储在栈中的简单 ...

  6. JavaScript值类型与执行环境和垃圾处理机制

    JavaScript变量分为基本值类型和引用值类型,基本值类型就是以下这五种:Boolean,Number,String,Null,Undefined.基本值类型和引用值类型具有以下特点: 1.基本值 ...

  7. JavaScript语法细节——引用与复制

    原文:JavaScript语法细节--引用与复制 我们都知道,JS中变量的赋值有两种方式,最近在折腾自己写的标签栏插件,碰到了很多平时没注意的问题.正好,那边处理清楚了,稍微整理一下关于引用与复制相关 ...

  8. SharePoint 2010自定义母版页小技巧——JavaScript和CSS引用

    通常在我们的项目中,都会涉及到母版页的定制.并且必不可少的,需要配合以一套自己的JavaScript框架和CSS样式.你有没有遇到过这样的情况呢,在开发环境和UAT时都还算顺利,但是当最终部署到生产服 ...

  9. PHP获取函数返回值的引用

    通过在函数前添加&可以获取函数返回值的引用,如:function &test(){return 10;}

随机推荐

  1. visual studio2015从git上clone(克隆)项目

    本文介绍Visual Studio2015从git上clone项目代码的步骤. 1.打开VS2015,进到起始页,打开"团队资源管理器",如下图: 2.点击"克隆&quo ...

  2. C++模板机制总结

    模板是C++中非常重要的组成部分,之前自己对这块领域一直不太熟悉.最近趁着有时间学习了一下,特此总结. 首先是函数模板,它的定义方式如例子所示: template <typename T> ...

  3. WPF MVVM 关闭View

    在ViewModel中定义一个变量: private Action _closeAction; 在ViewModel的构造函数中这样定义:public MainWindowViewModel(Acti ...

  4. MockMultipartFile

    org.springframework.mock.webClass MockMultipartFile java.lang.Object org.springframework.mock.web.Mo ...

  5. jquery datatable&lbrack;表格处理&rsqb;

    最近在公司实习发现一个额功能强大的表格解决方案,了解了一下,先总结如下: 1.官网:http://www.datatables.net/ 2.需要特别注意:被dataTable处理的table对象,必 ...

  6. 小黄豆CRM软件安装

    小黄豆CRM软件(官方网址:http://www.xhdcrm.com,演示地址:http://demo.xhdcrm.com)是一款开源免费的客户关系管理系统,其客户跟进模块简单易用.安装环境是wi ...

  7. hdu 4607 树的直径

    思路:利用dfs遍历整棵树,找出最长子树与次长子树,两者的和最大就是直径. 若k值小于直径就输出k-1,否则输出(k-d-1)*2+d; #include<iostream> #inclu ...

  8. DOM中的NodeList与HTMLCollection

    最近在看<Javascript高级程序设计>的时候,看到了这样一句话:“理解NodeList和HTMLCollection,是从整体上透彻理解DOM的关键所在.”,所以觉得应该写一篇关于N ...

  9. win7 64下安装mysql-python报错的解决办法

    最近要使用django进行项目开发,需要使用mysql-python模块. 在本地搭建环境安装的时候却出现报错,Unable to find vcvarsall.bat  在网上找了很多资料,发现是w ...

  10. C&num; 编辑距离实现

    /// <summary> /// 计算 /// </summary> /// <param name="str1"></param&gt ...