数据类型
* 1.基本数据类型(简单数据类型)
* 2.引用数据类型(复杂数据类型)
基本数据类型内部存储的是值
1.存储
变量的数据存储的地方是内存中,内存分为两个栈内存,堆内存
* 基本数据类型存储在栈内存中,比如: string number undefined null boolean
* 复杂数据类型
数组/对象/函数名存放在栈内存中
将数据本体存放在堆内存中,比如对象或者数组或者函数
然后将指向该内存的地址,存放在数组名或者对象名或者函数名中
面试题:数据类型之间有什么区别
基本数据类型有哪些,然后他们存储的地方是栈内存中
引用数据类型有哪些,然后他们数据本体存放的地方是堆内存中,然后变量名存储的位置是栈内存中
2. 赋值
* 基本数据类型:
赋值以后,两个变量之间没有任何关系,相当于将我自己的某一个东西,复制一份给你,然后你的就是你的,我得是我的
* 复杂数据类型
因为变量内部存储的是指向堆内存的地址, 所以在赋值的时候, 其实是将 这个地址给到了另外一个变量
那么相当于这两个变量存储的是 同一个 钥匙, 所以操作其中一个变量的时候, 会影响另外一个变量
基本数据类型:
var num1 = 100
var num2 = num1 // num2 === 100
num2 = 666
console.log(num1) // 100
console.log(num2) // 666
复杂数据类型
var obj1 = {
name: 'QF001',
age: 18
}
var obj2 = obj1
console.log(obj2) // {name: 'QF001', age: 18}
obj2.name = 'QF666'
console.log(obj2) // {name: 'QF666', age: 18}
console.log(obj1) // {name: 'QF666', age: 18}
3. 比较
* 基本数据类型:是值得比较
* 复杂数据类型:比较的时候 比较的是 存储地址
var num1 = 100
var num2 = '100'
console.log(num1 === num2) // false
var arr1 = [1, 2, 3]
var arr2 = arr1
console.log(arr1 === arr2) // true
4. 传参
* 基本数据类型:将值拷贝一份传递给形参,在函数内修改不会影响外界
* 复杂数据类型:将值拷贝一份传递给形参,在函数内修改会影响外界
function fn(num) {
num = 'QF001'
}
var str = 'abc'
fn(str)
console.log(str) // 'abc'
function fn1(o) {
o.name = 'qwer'
}
var obj = {
name: 'ABC'
}
fn1(obj)
console.log(obj.name) // 'qwer'