JavaScript基本数据类型与引用数据类型对比

256 阅读3分钟

JavaScript数据类型

1. JavaScript 中共有种内置数据类型,包括基本类型引用类型

  • 数字(Number)
  • 字符串(String)
  • 布尔(Boolean)
  • 符号(Symbol)
  • 空(undefined)
  • 空(null)
  • 对象(Object)

stringnumberbooleannullundefinedsymbol 类型统称为基本数据类型nullundefined通常被认为是特殊值,这两种类型的值唯一,就是其本身。Symbol 类型,通过函数方式声明,函数栈不能用 new 命令,因为 Symbol 是原始数据类型,不是对象。可以接受一个字符串作为参数,为新创建的 Symbol 提供描述,用来显示在控制台或者作为字符串的时候使用,便于区分。Object类型为引用数据类型(Array,Date,Math...),

赋值

// 基本数据类型
let str1 = 'JavaScript';
let str2 = str1
str1 ='Java'
console.log(str1)// str1值为Java
console.log(str2)// str2值为JavaScript

let num1 = 1;
let num2 = num1
num1 = 3
console.log(num1)// num1值为3
console.log(num2)// num2值为1
/**
*由此可得 基本数据类型的赋值是遵循最后一次修改,基本数据类型在内存空间的存储是固定的,当发生修改时会直接
将上一次的值丢弃,使用新值
*也就是说,最后一次赋值是多少就是多少,
* str1最后一次赋值是'java'所以值是'java'  str2最后一次赋值是(str1在给str赋值之前的最后一次修改或赋值
是'JavaScript')'JavaScript'
*num1 最后一次赋值3 所以num1 = 3
*/
let obj1 = {status:1}
let obj1 = {status:2}
let obj2 = obj1
obj1.status = 0
console.log(obj1)// obj1值为{status:0}
console.log(obj2)// obj2值为{status:0}
/**
*变量在保存的是引用数据类型在内存空间的储存时的地址(引用),在修改时直接赋值即为将引用地址赋值给
对应的变量,在修改引用类型地址指向的值时,由于多个变量指向的同一个引用,所以改变一个,全部改变
*/

比较

//基本数据类型比较 ===(===比较值和类型,==比较值不比较类型)
let str1 = 'JavaScript';
let str2 = 'JavaScript';
console.log(str1 === str2)// true
/**
*基本数据类型比较是直接进行比较,在内存空间中储存在栈中(视环境而定,不是绝对的),栈中的数据储存的是值,
可以直接进行比较
*/

//引用数据类型比较 ===(===比较值和类型,==比较值不比较类型)
let obj1 = {status:1}
let obj2 = {status:1}
console.log(obj1 === obj2)// false
/**
*引用数据类型储存在堆中,变量保存的是引用地址,在堆中的每一个独立空间都有不同的地址,所以,当两个引用
类型数据进行比较的时候,比较的是引用地址是否是同一个,而非值(使用JSON.stringify()可以把引用类型转换成
字符串进行比较是否相同)
*/

注意

//函数Function传参,基本类型作为参数时
let a = 10
function fun(num){
num = 100
}
fun(a)
console.log(a) // 10
/**
* a(基本数据类型)作为参数时,函数形参num相当于是新声明的变量,遵循基本数据类型赋值规则
*/
let arr = [1,2,3,4] 
function fun(numArr){
numArr.push(10)
}
fun(arr)
console.log(arr) // [1,2,3,4,10] 
/**
* arr(引用数据类型)作为参数时,函数形参numArr相当于是新声明的变量,传入引用类型时,相当于
*将地址复制了一份,所以有两个变量指向同一个地址,那么其中一个修改后,所有指向该地址的变量所看
*到的值也会发生改变
*/