笔记|高阶JavaScript笔记1(数据类型 ,相关问题, 数据_变量_内存 ,相关问题,对象)


高阶JavaScript

  • 数据类型
    • 相关问题(undefined与null的区别,什么时候给变量赋值为null,严格区别变量类型和数据类型)
  • 数据_变量_内存
    • 相关问题(关于引用变量赋值的问题; 在JS调用函数时传递变量参数时,是值传递还是引用传递; JS引擎如何管理内存)
  • 对象

数据类型 1、分类
(1)基本类型
  • String:任意的字符串
  • Number:任意的数字
  • Boolean:true/false
  • Undefined:undefined
  • Null:null
(2)对象类型/引用类型
  • Object:任意对象
  • Function:一种特别的对象(函数)
  • Array:一种特别的对象(数组)
2、判断
(1)typeof
  • 可以判断:undefined,数值,字符串,布尔值,function
  • 不能判断:null与object;object和array
  • 返回数据类型的字符串表达
var a; console.log(a,typeofa,typeof a==='undefined'); //undefined,'undefined',true a=4; console.log(typeof a==='number'); //true a='lyh'; console.log(typeof a==='string'); //true a=null; console.log(typeof a); //'object'; 只能用===来判断是否是null

(2)instanceof
  • 判断对象的具体类型
var b1 = { b2:[1,'abc',console.log], b3:function(){console.log('b3'); return function(){ return 'lyh'; } }; };

笔记|高阶JavaScript笔记1(数据类型 ,相关问题, 数据_变量_内存 ,相关问题,对象)
文章图片

(3)===
  • 可以判断:undefined,null
相关问题(undefined与null的区别,什么时候给变量赋值为null,严格区别变量类型和数据类型) 1、undefined与null的区别
  • undefined代表定义未赋值
  • null定义了并赋值,只是值为null
var a ; console.log(a); //undefined a = null; console.log(a); //null

2、什么时候给变量赋值为null
  • 初始赋值为null,表明将要赋值的变量为对象
  • 结束时,让对象成为垃圾对象(被垃圾回收器回收)
var b = null; //初始赋值为null,表明将要赋值的变量为对象 b = [1,2,3]; b = null; //让b指向的对象成为垃圾对象(被垃圾回收器回收)

3、严格区别变量类型和数据类型
(1)数据的类型
  • 基本类型
  • 对象类型
(2)变量的类型
  • 基本类型:保存的是基本类型的数据
  • 引用类型:保存的是地址值
数据_变量_内存 1、什么是数据
  • 存储在内存中的代表特定的信息的东西,本质上是0101…
  • 数据的特点:可传递,可运算
  • 一切皆数据
  • 内存中所有操作的目标
2、什么是内存
  • 内存条通电后产生的可存储数据的空间(临时的)
  • 内存的产生和死亡:内存条==>通电==>产生内存空间==>存储数据==>断电==>内存空间和数据都消失
  • 一块小内存的两个数据
    (1)内部存储的数据
    (2)地址值
  • 内存分类
    (1)栈:全局变量/局部变量
    (2)堆:对象
3、什么是变量
  • 可变化的量,由变量名和变量值组成
  • 每个变量都对应着一块小内存,变量名用来查找对应的内存,变量值就是内存中保存的数据
4、内存,数据,变量三者的关系
  • 内存用来存储数据的空间
  • 变量是内存的标识
    笔记|高阶JavaScript笔记1(数据类型 ,相关问题, 数据_变量_内存 ,相关问题,对象)
    文章图片

    笔记|高阶JavaScript笔记1(数据类型 ,相关问题, 数据_变量_内存 ,相关问题,对象)
    文章图片
相关问题(关于引用变量赋值的问题; 在JS调用函数时传递变量参数时,是值传递还是引用传递; JS引擎如何管理内存) 1、关于引用变量赋值的问题
  • 2个引用变量指向同一个对象,通过修改一个变量修改对象内部数据,另一个变量看到的是修改后的数据
  • 2个引用变量指向同一个对象,让其中一个引用变量指向另一个对象,另一引用变量依然指向前一个对象
var a = { age: 12 }; a = { age: 13 }; function fun(obj) { obj = { age: 15 }; } fun(a); alert(a.age); //输出13 /*因为传实参进去之后obj一开始的内容等于a; 后来obj又开辟了一个新的地址,已经和a无关了*/

【笔记|高阶JavaScript笔记1(数据类型 ,相关问题, 数据_变量_内存 ,相关问题,对象)】2、在JS调用函数时传递变量参数时,是值传递还是引用传递
  • 理解1:都是值(基本值/地址值)传递
  • 理解2:可能是值传递,也可能是引用传递(地址值)
3、JS引擎如何管理内存
(1)内存生命周期
  • 分配小内存空间,得到它的使用权
  • 存储数据,可以反复进行操作
  • 释放小内存空间
(2)释放内存
  • 局部变量:函数执行完自动释放
  • 对象:成为垃圾对象==>垃圾回收器回收
function fun(){ var b = {}; }; fun(); //b是自动释放,b指向的对象是在后面的某一时刻由垃圾回收器回收

对象 1、什么是对象
  • 多个数据的封装体
  • 用来保存多个数据的容器
  • 一个对象代表现实世界中的一个事物
2、为什么要用对象
  • 统一管理多个数据
3、对象的组成
  • 属性:属性名(字符串)和属性值(任意)组成
  • 方法:一种特别的属性(属性值是函数)
4、如何访问对象内部的数据
  • . 属性名:编码简单,有时不能用
  • [‘属性名’]:编码麻烦,能通用
  • 什么时候用 [‘属性名’] 的方式
    (1)属性名包含特殊字符:空格 与 -
    (2)属性名不确定
    笔记|高阶JavaScript笔记1(数据类型 ,相关问题, 数据_变量_内存 ,相关问题,对象)
    文章图片

    笔记|高阶JavaScript笔记1(数据类型 ,相关问题, 数据_变量_内存 ,相关问题,对象)
    文章图片

    推荐阅读