JavaScript引用指向的是值。

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

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

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

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

换一种操作b的方式:

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

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

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

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

此时在函数体中,没有进行任何赋值类的操作,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. PDA移动POS开单扫描打票收银系统-带来零售批发 新的技术 新的手段!!

    手持POS终端高清彩屏,清晰.美观.大方,适用于仓库.超市.服装.食品.批发零售.手机电脑等企业管理.可与管理软件灵活对接.1:员工记不住价格,产品名称,只要有PDA扫描,价格,库存,直接开销售单,打 ...

  2. 水题 Codeforces Round #296 (Div. 2) A. Playing with Paper

    题目传送门 /* 水题 a或b成倍的减 */ #include <cstdio> #include <iostream> #include <algorithm> ...

  3. Quartz.Net 配置模板范例

        1.App.config <?xml version="1.0" encoding="utf-8"?> <configuration& ...

  4. System call in linux by C

    1: #include <stdlib.h> 2: int system(const char *command); 3:  4: while (something) { 5: int r ...

  5. 新旧各版本的MySQL可以从这里下载

    http://downloads.mysql.com/archives/

  6. 【BZOJ】1877: [SDOI2009]晨跑(最小费用最大流)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1877 费用流做多了,此题就是一眼题. 拆点表示只能经过一次,容量为1,费用为0. 然后再连边即可,跑 ...

  7. HDU 4630 No Pain No Game(树状数组)

    题目链接 看的别人的题解,离线之后,按r排序,枚举1-n,利用pre[j],存上次j的倍数出现的位置,树状数组里统计的当前位置到最后的最大值,树状数组是求区间最值其实应该很麻烦的,但是此题用法只是求到 ...

  8. Dynamic Expression.Call Any

    public class Foo { public IList<string> Strings { get; set; } } class Program { static void Ma ...

  9. in_array 的第三个参数strict设置为 true

    var_dump(in_array(0, array('s' )); 这句话的结果是bool(true). 因为in_array会将0 和's' 进行比较,0是number类型,'s'是string类 ...

  10. 【iHMI43 应用演示】之 modbus 协议(从机)通信演示

    ============================== 技术论坛:http://www.eeschool.org 博客地址:http://xiaomagee.cnblogs.com 官方网店:h ...