一、引用类型和基本类型的区别
基本类型有:Undefined、Null、Boolean、Number、String、Symbol
引用类型有:统称为 Object 类型。
1)、内存的角度:
基本类型在内存中,占据一块空间,空间里存储的就是数据,获取数据是直接获取
引用类型在内存中,占据两块空间,第一块存储的是地址,第二块存储的是数据,获取数据是属间接取值
2)、赋值的角度
基本类型赋的就是值,引用类型赋的就是地址
//一、赋值的角度
//1.基本类型
let name = "小明"
let str = name
console.log("str", str);//小明
name = "老六"
console.log("str", str);//小明
//2.引用类型
let person = {
name: "小明",
age: 18
}
let newperson = person
console.log("newperson", newperson);//{name: '小明', age: 18}
person.age = 20
console.log("newperson", newperson);//{name: '小明', age: 20}
3)、函数传参
基本类型传的是值,引用类型传的是地址
//二、函数传参的角度
//1.基本类型
let a = 12
let fn01 = function (num) {
num = num + 1
return num
}
console.log("fn01", fn01(a));//13
console.log("a", a);//12
//2.引用类型
let b = [18, 12]
function fn02(arr) {
let newarr = arr
newarr[0] = "我变了"
return newarr
}
console.log("fn02", fn02(b));//['我变了', 12]
console.log("b", b);//['我变了', 12]
二、null和undefined区别
相同点:都是基本数据类型
undefined: 定义变量后,没有赋值
1)定义了形参,没有传实参,显示 undefined
2)对象属性名不存在时,显示 undefined
3)函数没有写返回值,即没有写 return,拿到的是 undefined
4)写了 return,但没有赋值,拿到的是 undefined
//1.定义变量后,没有赋值
var a;
console.log("a", a);//undefined
//2.定义了形参,没有传实参,显示 undefined
function fn01(a) {
console.log(a);//undefined
}
fn01()
//3.函数没有写返回值,即没有写 return,拿到的是 undefined
function fn02(a) {
var b = a
}
console.log("fn02", fn02(1));//undefined
//4.写了 return,但没有赋值,拿到的是 undefined
function fn03(b) {
return b
}
console.log("fn03", fn03());//undefined
null: 对象没有引用的值,即就是引用类型里没有存储地址
1)作为函数的参数,表示该函数的参数不是对象
2)作为对象原型链的终点
2.转为数值:
null 转为数值是 0 ;
undefined 转为数值是 NAN(not a number)。
//转为数值
// null 转为数值是 0 ;
var a = null
var b = Number(a)
console.log("b", b);//0
// undefined 转为数值是 NAN(not a number)。
var c = Number(undefined)
console.log("c", c);//NaN
3.typeof判断类型:
null 通过 typeof 判断类型的时候结果的输出是 object ;
undefined 的类型是 undefined
//typeof判断类型:
console.log(typeof null);//object
console.log(typeof undefined);//undefined