原始值就是最简单的数据
原始值一共有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,区别就在这个时候体现了,引用类型传的是址,而不是值。这就意味着我们修改 obj1 的 name 属性的值为 '掘金沸点'的时候,是修改当前obj1对象在这个地址上的值,因为 obj1 和 obj2 都在这个地址上,所以这个修改二者都会受影响。
引用类型是从地址去拿!!!
let a = {c: 1 };
let b = a;
console.log(b)
a.c = 2;
注意:
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