原生JS | 值类型与引用类型变量

HTML5学堂-码匠:在JavaScript中,存在着两种不同的变量类型,一种是值类型变量,一种是引用类型变量。其中数组、对象、函数都属于引用类型变量,数值、布尔值、null、undefined、字符串属于值类型变量,不同类型变量在参数传递方面有不同的运行机制。

结果不同的两个实例

实例1

var user = 'HTML5学堂';
var newUser = user;
newUser = '码匠';
console.log(user);
console.log(newUser);

实例2

var user = {
name: 'HTML5学堂'
};
var newUser = user;
newUser.name = '码匠';
console.log(user.name);
console.log(newUser.name);

两种实例的运行结果

实例1运行后,控制台的打印结果为:

HTML5学堂

码匠

实例2运行后,控制台的打印结果为:

码匠

码匠

两种实例不同结果的“根源”

导致这两种不同结果的根源在于JavaScript中的变量类型分为两大类:值类型和引用类型。不同类型的数据在“赋值”时机制并不相同。

欢迎沟通交流~~~HTML5学堂(码匠)

值类型变量

值类型包括:数值、布尔值、null、undefined、字符串。

对于值类型变量,变量的交换(将一个变量赋值给另一个变量)相当于是创建了一个新的空间,把原有的变量值复制一份,并将其存储在新空间当中,新空间与之前空间互不影响。

引用类型变量

引用类型包括:对象、数组、函数。

引用类型变量的交换,并不会创建一个新的空间,而是让新变量和之前的变量,同时指向一个原有空间(即同一个地址)。可以理解为C语言的指针。

以生活的实例来说,就如同原来一个人有家门的钥匙,之后这个人结婚了,配了一把钥匙给自己的妻子,这时候,两个人共同有家的钥匙,但是家还是一个家。

类似的代码案例

如果觉得已经弄明白了变量的两种不同类型,可以查看如下案例,测试一下自己是否已经掌握该知识了,如下的案例当中还会涉及到函数与参数的相关知识。

代码实例 - A

function changeName(username){
    username = '码匠';
}
var username = 'HTML5学堂';
changeName(username);
console.log(username);

代码实例 - B

function changeName(username){
    username[0] = '码匠';
}
var username = ['HTML5学堂'];
changeName(username);
console.log(username);

原文发布于微信公众号 - HTML5学堂(h5course-com)

原文发表时间:2017-05-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏coding for love

JS入门难点解析8-作用域,作用域链,执行上下文,执行上下文栈等分析

(注1:如果有问题欢迎留言探讨,一起学习!转载请注明出处,喜欢可以点个赞哦!) (注2:更多内容请查看我的目录。)

591
来自专栏小勇DW3

迭代器模式以及对内部类的运用

上一篇文章写了static的作用,其中有部分是介绍了内部类和静态内部类,下面就结合设计模式中的迭代器模式,介绍一下内部类的好处;

573
来自专栏hbbliyong

一个小程序引发的思考

   既然是一个小程序引发的思考,那么我们就先看看这个小程序,看看他有何神奇之处: namespace ConsoleApplication1 { cl...

2264
来自专栏LanceToBigData

异常处理升级版

其实前面就写了一篇异常处理的文章,但是那个文章实在是感觉太详细了,不太好复习。所以今天我就再写一篇这样就更好复习了。 一、异常概述   在我们日常生活中,有时会...

1769
来自专栏java达人

最有价值的50道java面试题(二)

来自骆昊的技术专栏 26、抽象的(abstract)方法是否可同时是静态的(static),是否可同时是本地方法(native),是否可同时被synchron...

20310
来自专栏决胜机器学习

《Redis设计与实现》读书笔记(七) ——Redis对象综述及字符串对象实现原理

《Redis设计与实现》读书笔记(七) ——Redis对象综述及字符串对象实现原理 (原创内容,转载请注明来源,谢谢) 一、概述 redis不是直接的利用简单动...

2938
来自专栏老九学堂

【超全】C语言初学者必须掌握的关键字!

其实小伙伴在写代码的时候,关键字还是用的比较多的,老九主要就平常中用到的常用关键字进行总结,便于小伙伴们更全面的理解其在代码中的意图。 C语言关键字总结 sta...

3396
来自专栏GreenLeaves

Javascript深拷贝

var oOriginal = { memNum: 1, // number ...

1796
来自专栏程序员互动联盟

【编程基础】聊聊C语言-兵马未动粮草先行(1)

上一篇我们讲的聊聊C语言-我的地盘我做主,相信大家对变量的存储类型和变量的作用域有了一定的了解。现在我们马上公布上期的答案如下: #include<stdio....

3178
来自专栏吴伟祥

深入了解Redis内存模型 原

在客户端通过redis-cli连接服务器后(后面如无特殊说明,客户端一律使用redis-cli),通过info命令可以查看内存使用情况:

724

扫码关注云+社区