原始值与引用值

68 阅读2分钟

原始值就是最简单的数据

原始值一共有6种:

  • Undefined
  • Null
  • Boolean
  • Number
  • String
  • Symbol

引用值是由多个值构成的对象

在操作对象时,实际上操作的是对该对象的引用。

  • Object
  • Array
  • Function
  • ... ...
let obj = {//对象 name: '掘金' }
var colors = ["red", "green", "blue"];//数组
function a(name) {//函数 return "Hello, " + name + "!"; } 
var currentDate = new Date();//日期 
var pattern = /\d+/;//正则表达式

原始值与引用值的区别

1.原始值

let a = 1;
let b = a;
a = 2;
console.log(b);

原始类中:在这段代码中,首先我们声明了一个原始数据类型变量 a 并赋值为 1。然后,我们声明了另一个变量 b 并将 a 的值赋给了 b,所以 b 的值也变成了 1。接着,我们将 a 的值修改为 2,但这不会影响到 b 的值,因为在赋值时,b 已经获取了 a 的值,而后续 a 的变化不会影响 b

赋值原始值不会影响

2.引用值

let obj1 = { name: '掘金文章' } 
let obj2 =obj1;
obj1.name = '掘金沸点'
console.log(obj2.name);
掘金沸点

在这段代码中,首先我们创建了一个对象 obj1,它包含一个属性 name,其值为 '掘金文章'。然后,我们将 obj1 的引用赋给了 obj2,区别就在这个时候体现了,引用类型传的是址,而不是值。这就意味着我们修改 obj1name 属性的值为 '掘金沸点'的时候,是修改当前obj1对象在这个地址上的值,因为 obj1obj2 都在这个地址上,所以这个修改二者都会受影响。

引用类型是从地址去拿!!!

let a = {c: 1 };
let b = a;
console.log(b)
a.c = 2;

注意: image.png

3.动态属性修改属性与方法

引用值可以添加修改属性与方法

//原始值
let person = new Object()
person.name = 'rsl'
console.log(person.name)"rsl"
//引用值
let person;
person.name = 'rsl'
console.log(person.name)undefined 

4.传递参数

let num1 = 20;
function add(num) {
    num += 10 //不会影响原始值参数
    return num
}

let res = add(10)
console.log(num1) '20'
console.log(res) '30'

引用值就大不一样

查看具体类型注意点!!!

1.typeof 查看原始值具体类型(null为object)

2.instanceof