js基本类型和引用类型区别(js中的基本数据类型和引用类型)
导语:JavaScript 基本类型和引用类型的区别
在 JavaScript 中,变量或参数在内存中的分配可以是值或一个地址的引用。
两者之间的主要区别在于,在分配基本数据类型时会发生值传递,而在分配对象类型时会发生引用传递。
让我们在这篇文章中更详细地讨论价。
1.了解基本数据类型和引用类型
JavaScript 提供了 2 类数据类型:基本数据类型和引用类型。
基本数据是数字(Number)、布尔值(Boolean)、字符串(String)、符号(Symbol)和特殊值null和undefined.
// 基本数据类型const number = 10;const bool = false;const str = &39;;const missingObject = null;const nothing = undefined;
第二类是引用类型。比如普通对象(Object)、数组(Array)、函数(Function)等等——都是引用类型。
// 引用类型const plainObject = { prop: &39;};const array = [1, 5, 6];const functionObject = (n1, n2) => { return n1 + n2;};
2. 值和引用传递区别
在JavaScript 中的所有的基本类型都是按值传递的。
按值传递意味着每次将值分配给变量时,都会创建该值的副本。
让我向您展示按值传递是如何表现出来的。
假设您有 2 个变量a和b:
let a = 1;let b = a;b = b + 2;console.log(a); // 1console.log(b); // 3
第一条语句let a = 1定义了一个值为1的变量a。
第二条语句let b = a定义了另一个变量b并用变量a的值初始化它——这就是按值传递的。直接将a变量的值1副本分配给b。
之后,b = b + 2增加2并变为3,b变量发生变化,并且这种变化不会影响a。
然而,引用类型传递以不同的方式表现出来。
创建对象时,您将获得对该对象的引用。如果 2 个变量具有相同的引用,则更改对象会反映在两个变量中。
让我们检查以下代码示例:
let x = [1];let y = x;y.push(2);console.log(x); // [1, 2]console.log(y); // [1, 2]
第一条语句let x = [1]创建一个变量x,并给它初始化一个数组对象。
然后第二条语句let y = x定义一个变量y,并使用变量x中的引用对y进行初始化。
当 y.push(2) 改变数组2。因为x和y变量引用同一个数组,所以这种变化反映在两个变量中。
注意:为简单起见,我说变量包含对象的引用。但严格来说,JavaScript 中的变量保存的只是对象的引用。
4.基本类型和引用类型的比较
使用严格比较运算符时===进行比较基本类型时,如果两个变量具有相同的值,则它们是相等的。以下所有比较都是相等的:
const one = 1;const oneCopy = 1;console.log(one === oneCopy); // trueconsole.log(one === 1); // trueconsole.log(one === one); // true
变量one和oneCopy具有相同的值1。只要两个操作数都是1,使用运算符===的计算结果都是true,无论值来自何处:文字1、变量的值、表达式 2 - 1。
但是在比较引用类型时的结果却不同。只有当它们引用完全相同的对象时,2 个引用才相等。
ar1和ar2持有对不同数组实例的引用:
const ar1 = [1];const ar2 = [1];console.log(ar1 === ar2); // falseconsole.log(ar1 === [1]); // falseconst ar11 = ar1;console.log(ar1 === ar11); // trueconsole.log(ar1 === ar1); // true
虽然ar1和ar2引用相同结构的数组,但ar1 === ar2结果却为false,是因为ar1和ar2引用不同的数组对象。
只有当ar1和ar2引用相同的对象时使用比较操作符===结果才返回true,如ar1 === ar11,ar1 === ar1。
五、总结
在 JavaScript 中,基本类型是值传递:这意味着每次分配一个值时,都会创建该值的副本。
另一方面,如果您修改引用类型对象,则引用该对象的所有变量都将同步更改。
比较运算符区分基本类型和引用类型。当 2 个变量只有在它们引用完全相同的对象时才相等,但是如果它们只是具有 2 个相同的值的基本类型变量,则这2 个变量是相等的。
本文内容由快快网络小媛创作整理编辑!