美文网首页
js变量赋值分析--基本类型与引用类型

js变量赋值分析--基本类型与引用类型

作者: dogLin | 来源:发表于2018-03-30 16:11 被阅读13次

原文地址

变量赋值

先来几个例子:

var a = "apple";
var b = a;
a = "banana";
b

按理说,b = a后,a是啥值b就应该跟着是啥值了~
但,b结果是"apple",还是一开始赋值时a的值。

var a = {name: "apple"};
var b = a;
a.name = "banana";
b.name

这回,b又不争气的跟着a变了,b.name结果是"banana"

var a = {name: "apple"};
var b = a;
a = {name: "banana"};
b.name

这回b又坚持自己了,b.name结果是"apple"

var a = {count: 2};
var b = a.count;
a.count = 3;
b

同样b的结果还是最开始的2


其实b很无辜,这个要从ECMAScript的变量值类型说起~

类型共有两种:

基本类型 (primitive values) - 包括Undefined, Null, Boolean, Number和String五种基本数据类型
引用类型 (reference values) - 保存在内存中的对象们,不能直接操作,只能通过保存在变量中的地址引用对其进行操作
现在回来看第一个例子

var a = "apple";

"apple"是String类型,属于基本类型,这时值是这样储存的:

image
var b = a;这时a的值被copy了一份赋给了b:
image
所以,从此a和b井水不犯河水,各自怎么修改都不会影响对方了~

再来看第二个例子

var a = {name: "apple"};

{name: "apple"}是一个Object,属于引用类型,赋值前后值是这样存储的:


image

所以当a.name = "banana";时,修改的是大家共同指向的内存中的object的属性值,所以b.name的值也就跟着变了。

第三个例子中

var a = {name: "apple"};
var b = a;
a = {name: "banana"};
// {name: "banana"} 是内存中的一个新的Object了,
// a变量存储的地址也是指向这个新的Object的了,所以和b又无关了
b.name //还是"apple"

第4个例子

var a = {count: 2};
var b = a.count;
// a.count是Number类型,所以值被copy给b,
// 从此再怎么修改与b无关了
a.count = 3;
b //还是2

小总结,变量赋值时总是会copy一份的,如果是基本类型,copy的就是实际的值,如果是引用类型,copy的是指向Object的地址值,所以指向的还是同一个Object。


变量比较

顺手再来看看变量的比较~

var a = "apple";
var b = "apple";
a == b

这个没问题,结果肯定是true。
那这个呢?

var a = ["apple"];
var b = ["apple"];
a == b

虽然俩数组长一模一样,结果还是false。

其实原理还是一样,对于基本类型,比较的就是实际的值,而对于引用类型(Array也是一种Object),比较的是地址值,虽然两个数组内容是一样的,但它们在内存中是两个Object,地址是不一样,所以比较的结果是false。

相关文章

  • js变量赋值分析--基本类型与引用类型

    原文地址 变量赋值 先来几个例子: 按理说,b = a后,a是啥值b就应该跟着是啥值了~但,b结果是"apple"...

  • 深浅拷贝

    JS中的变量类型分为值类型(基本类型)和引用类型;对值类型进行复制操作会对值进行一份拷贝,而对引用类型赋值,则会进...

  • JS变量类型,存储方式以及特点

    1.JS变量类型 JS变量类型分为基本类型和引用类型 基本类型:基本类型有Undefined,String,Num...

  • 前端基础进阶(一): 数据类型

    js的基本类型与引用类型 基本类型:stringNumberBooleanundefined(表示变量声明但并未赋...

  • JS变量,作用域,内存问题

    基本类型和引用类型 js中变量类型分为两大类。基本类型和引用类型。基本类型指值直接保存在变量本地的类型。引用类型变...

  • java一快速入门

    变量 1.基本类型的 2引用类型 1.基本类型的 可以重新赋值,赋值给其他变量, 整数类型:byte(1) ,sh...

  • 数据类型(2018/03/14)

    js中存在两种数据类型:基本类型和引用类型。 当我们进行赋值操作时,解析器会首先分析数据是值类型还是引用类型。 一...

  • JS红宝书第四章变量赋值及参数传递问题

    一.基本类型变量按值访问 1.1赋值后变量1变量2各自独立 二.引用类型变量按引用访问 2.1赋值后变量1和变量2...

  • js基本类型与引用类型

    1.js基本类型和引用类型 首先js的变量有两种类型,基本类型值和引用类型值 基本数据类型:null,undefi...

  • Java 引用类型解析!

    一、值类型与引用类型 1、变量初始化 2、变量赋值 从上图可以显而易见,num是int基本类型变量,值就直接保存在...

网友评论

      本文标题:js变量赋值分析--基本类型与引用类型

      本文链接:https://www.haomeiwen.com/subject/iyuicftx.html