JS高级笔记--数据_变量_内存

1.数据类型

1.1数据类型分两类

  • 基本(值)类型
    • string:任意字符串
    • number:任意的数字
    • boolean:true/false
    • undefined:undefined
    • null:null
  • 对象(引用)类型
    • object:任意对象
    • function:一种特别的对象(可以执行)
    • array:一种特别的对象(数值下标)

1.2判断数据类型

  • typeof:
    • 可以判断:undefined、数字、字符串、布尔值、function
    • 不可判断:unll与object、array与object
  • instanceof:
    • 判断对象的具体类型
  • ===
    • 可以判断:undefind,null

代码示例

var a = {
    b:[1,4,'tom'],
    c: function() {
        console.log(c);    
    }
}
console.log(a instanceof Object,a instanceof Array) // true false
console.log(a.b instanceof Array,a.c instanceof Function) // true true
console.log(typeof a.b === 'array') // true  

1.3相关问题:

1.undefined与null的区别?
  • undefined代表定义了但未赋值
  • null代表定义了也赋值了,只是值为null
var a
console.log(a) //undefined
a = null 
console.log(a) // null
2.什么时候给变量赋值为null?
  • 初始赋值,表明将要赋值为对象
  • 结束前,让对象成为垃圾对象(被垃圾回收器回收)
var b = null //初始赋值为null,表明将要赋值为对象
//确定对象就赋值
b = ['Tom',123]
//最后
b = null //让b指向的对象成为垃圾对象(被垃圾回收器回收)
3.严格区别变量类型与数据类型?
  • 数据的类型
    • 基本类型
    • 对象类型
  • 变量的类型 (变量内存值的类型)
    • 基本类型:保存的就是基本类型的数据
    • 引用类型:保存的是地址值

2.数据_内存_变量

2.1 什么是数据?

  • 存储在内存中代表特定信息的东西,本质上是010101001…
  • 数据的特点:可传递,可运算。
  • 一切皆数据,函数也是数据。

2.2 什么是内存?

  • 内存条通电后产生的可存储数据的空间(临时的)。
  • 内存产生和死亡:内存条(电路板)==> 通电 ==> 产生内存空间 ==> 存储数据 ==> 处理数据 ==> 断电 ==> 内存空间和数据都消失。
  • 一块小内存的两个数据
    • 内部存储的数据
    • 地址值
  • 内存分类
    • 栈:全局变量/局部变量
    • 堆:对象
  • 什么是变量?
    • 可变化的量,由变量名和变量值组成
    • 每个变量都对应一块小内存,变量名用来查找对应的内存,变量值就是内存中的保存的数据

2.3 内存、数据、变量三者之间的关系

  • 内存用来存储数据的空间
  • 变量是内存的标识

2.4 相关问题:

1.关于赋值和内存的问题

问:var a = xxx , a内存中保存的到底是什么?

  • xxx是基本数据,保存的就是这个数据
  • xxx是对象,保存的是对象的地址值
  • xxx是一个变量,保存的是xxx的内存内容(可能是基本数据,也可能是地址值)

2.关于引用变量赋值的问题

  • n个引用变量指向同一个对象,通过一个引用变量修改对象内部数据,其他所有引用变量看到的都是修改后的数据
  • n个引用变量指向同一个对象,让其中一个引用变量指向另一个对象,其他所有引用变量依然指向前一个对象
<script type="text/javascript">
    var obj1 = {name:'Tom'}
    var obj2 = obj1
    obj2.age = 12
    console.log(obj1.age)   // 12
    function fn(obj) {
        obj.name = 'Jack'    
    }
    fn(obj1)
    console.log(obj2.name) // Jack
    **************************************
    var a = {age:12}
    var b = a
    a = {name:'Bob',age:18}
    b.age = 14
    console.log(b.age,a.name,a.age) // 14 Bob 18
    
    function fn2(obj) {
        obj = {age:15}    
    }
    fn2(a)
    console.log(a.age) // 18
</script>

3.关于数据传递的问题

问:在js调用函数传递变量参数时,是值传递还是引用传递

  • 理解1:都是值(基本值/地址值)传递
  • 理解2:可能是值传递,也可能是引用传递(传递地址值)
<script type="text/javascript">
    var a = 3;
    function fn() {
        a = a + 1;  
        console.log(a,'a2') // 4 a2
    }
    fn(a)
    console.log(a,'a1')  // 3 a1
    
    function fn2(obj) {
        console.log(obj.name)    //Tom
    }
    var obj = {name:'Tom'}
    fn2(obj)
</script>

4.问:JS引擎如何管理内存?

1.内存生命周期

  • 分配小内存空间,得到它的使用权
  • 存储数据,可以反复进行操作
  • 释放小内存空间

2.释放内存

<script type="text/javascript">
    var a = 3
    var obj = {}
    obj = undefined
    function fn(){
        var b = {}    
    }
    fn() //b是自动释放,b所指向的对象是在后面的某个时刻由垃圾回收器回收
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值