数据类型总结:
1.分类:
基本类型:
1.Number:任意数值
2.String:任意文本
3.Boolean:true/false
4.undefined:undefined
5.null:null
对象()引用)类型:
Object:任意对象
Array:特别的对象类型(有下标/内部数据有序)
Function:特别的对象类型(可执行)
2.用于查看(判断)数据类型(typeof,instanceof,===):
typeof:(返回的是数据类型的字符串表达形式)
可以区别:数值,字符串,undefined,function
不可以区别:null与对象,一般对象与数组
instanceof:
专门用来判断对象数据的类型:Object,Array与Function等
===:
可以判断:undefined和null
代码示范区:
//1. 基本类型
var a
console.log(a, typeof a, a===undefined) // undefined 'undefined' true
console.log(a===typeof a) // false
a = 3
console.log(typeof a === 'number')
a = 'atguigu'
console.log(typeof a === 'string')
a = true
console.log(typeof a === 'boolean')
a = null
console.log(a===null) // true
console.log(typeof a) // 'object'
console.log('--------------------------------')
//2. 对象类型
var b1 = {
b2: [2, 'abc', console.log],
b3: function () {
console.log('b3()')
}
}
console.log(b1 instanceof Object, typeof b1) // true 'object'
console.log(b1.b2 instanceof Array, typeof b1.b2) // true 'object'
console.log(b1.b3 instanceof Function, typeof b1.b3) // true 'function'
console.log(typeof b1.b2[2]) // 'function'
console.log(b1.b2[2]('abc')) // 'abc' undefined
2.数据类型中一些特殊的区别:
1.undefined与null的区别?
undefined代表没有赋值
null代表赋值了,只是值为null
代码示范区:
var a1
var a2 = null
console.log(a1, a2)
2.什么时候给变量赋值为null呢?
var a=null //a将指向一个对象,但是对象此时还没有确定
a=null //让a指向的对象成为垃圾对象
代码示范区:
//初始
var a3 = null
//中间
var name = 'Tom'
var age = 12
a3 = {
name: name,
age: age
}
//结束
a3 = null
3.严格区别变量类型也数据类型?
js的变量本身是没有类型的,变量的类型实际上是变量内存中数据的类型
变量类型:
1.基本类型:保存基本类型数据的变量
2.引用类型:保存对象地址值的变量
数据对象
1.基本类型
2.对象类型
3.什么是 数据_变量_内存的简介?
1.什么是数据?
存储于内存中代表特定信息的'东西',本质就是010101的二进制
具有可读和可传递的基本特性
万物(一切)皆数据,函数也是数据
程序中所有操作的目标:数据
算术运算
逻辑运算
赋值
调用函数传参
2.什么是内存?
内存条通电后产生的存储空间(临时的)
* 产生和死亡: 内存条(集成电路板)==>通电==>产生一定容量的存储空间==>存储各种数据==>断电==>内存全部消失
* 内存的空间是临时的, 而硬盘的空间是持久的
* 一块内存包含2个数据
* 内部存储的数据(一般数据/地址数据)
* 内存地址值数据
* 内存分类
* 栈: 全局变量, 局部变量 (空间较小)
* 堆: 对象 (空间较大)
3.什么是变量?
值可以变化的量,由变量名与变量值组成
一个变量对应一块小内存,变量名用来查找到内存
变量值就是内存中保存的内容
4.内存,数据, 变量三者之间的关系:
* 内存是一个容器, 用来存储程序运行需要操作的数据
* 变量是内存的标识, 我们通过变量找到对应的内存, 进而操作(读/写)内存中的数据
关于赋值和内存问题:
代码区:
var a = 3
a = function () {
}
var b = 'abc'
a = b
b = []
a = b
问题区: var a = xxx, a内存中到底保存的是什么?
第一个: xxx是一个基本数据
第二个: xxx是一个对象
第三个: xxx 是一个变量
关于引用变量赋值问题:
1.多个引用变量指向同一个对象,通过一个引用变量修改对象内部数据另一个(一些)引用变量也看得见
代码解释区:
var obj1 = {}
var obj2 = obj1
obj2.name = 'Tom'
console.log(obj1.name)
function f1(obj) {
obj.age = 12
}
f1(obj2)
console.log(obj1.age)
2.多个引用变量指向同一个对象,让一个引用变量指向另一个对象, 另一个引用变量还是指向原来的对象
代码解释区:
var obj3 = {name: 'Tom'}
var obj4 = obj3
obj3 = {name: 'JACK'}
console.log(obj4.name)
function f2(obj) {
obj = {name: 'Bob'}
}
f2(obj4)
console.log(obj4.name)
关于数据传递问题 :
问题:在js调用函数时传递变量参数时,是值传递还是引用传递只是这个值可能是基本数据,也可能是引用(地址)数据
如果后一种看成是引用传递, 那就值传递和引用传递都可以有
代码示范区:
function f(a) {
console.log(a)
}
var n = 4
f(n) //传递的是n的值 --->值传递
function f2(a) {
a.name = 'atguigu'
}
n = {}
f2(n) // 传递的是n指向的对象 ---> 引用传递 ???
console.log(n.name)
内存管理:
问题;Js引擎如何管理内存?
1.内存生命周期
1.分配需要的内存
2.使用分配到的内存
3.不需要时将其释放/归还
2.释放内存:
为执行函数分配的栈空间:函数执行完自动释放
存储对象的堆空间内存:当内存没有引用指向时,对象成为垃圾对象垃圾回收器后面就会回收释放此内存
代码示范区:
var obj = {}
obj = null // ?使对象失去引用
function fn () {
var a = 3
var b = {}
}
fn() // ?释放fn局部环境的内存