JS高级基础总结

1.数据类型
(1). 分类(2大类)

  • 基本(值)类型
    • Number: 任意数值
    • String: 任意文本
    • Boolean: true/false
    • undefined: undefined
    • null: null
  • 对象(引用)类型 对象用于存代码数据
    • Object: 任意对象
    • Array: 特别的对象类型(下标/内部数据有序)
    • Function: 特别的对象类型(可执行)
      (2). 判断
  • typeof:
    • 可以区别: 数值, 字符串, 布尔值, undefined, function
    • 不能区别: null与对象, 一般对象与数组
  • instanceof
    • 专门用来判断对象数据的类型: Object, Array与Function
  • ===
    • 可以判断: undefined和null
      typeof: 返回的是数据类型的字符串表达形式
      console.log(b1.b2)返回的是object

(3) .undefined与null的区别?

  • undefined代表只定义没有赋值
  • null代表赋值了, 只是值为null
    (4). 什么时候给变量赋值为null呢?
  • var a = null //a将指向一个对象, 但对象此时还没有确定
  • a = null //让a指向的对象成为垃圾对象
    (5) 严格区别变量类型与数据类型?
  • js的变量本身是没有类型的, 变量的类型实际上是变量内存中数据的类型
  • 变量类型:
    • 基本类型: 保存基本类型数据的变量
    • 引用类型: 保存对象地址值的变量
  • 数据对象
    • 基本类型
    • 对象类型
      (6)什么是数据?
      存储在内存中代表特定信息,本质是二进制
      数据的特点:可传递,可运算
      一切皆数据
      内存中所有操作的目标都是数据
      算术运算
      逻辑运算
      赋值
      运行函数
      (7)什么是内存?
      内存条通电后产生的可存储数据的空间(临时的)
      内存产生和死亡:内存条(电路版)>通电>产生内存空间==>存储数据==>处理数据==>通电==>内存空间和数据都消失
      一块小内存的2个数据
      内部存储数据
      地址值数据
      内存分类
      栈:全局变量/局部变量
      堆:对象
      (8)什么是变量?
      可变化的量=变量名+变量值
      每个变量对应一块小内存
      变量名用于查找对应的内存,变量值即内存中保存的数据
      (9).内存,数据,变量三者之间的关系
      内存是存储数据的空间
      变量是内存的标识
      (10)关于引用变量赋值问题
      多个引用变量值指向一个对象,通过一个变量修改对象内部数据,其他所有变量看到的是修改之后的数据
      2个引用变量值指向一个对象,让其中一个引用变量指向另一个对象,另一个引用变量依然指向前一个对象

(11)在js调用函数时传递变量参数时,是值传递函数引用传递
理解1:都是值(基本/地址值)传递
理解2:可能是值传递,也可能是引用传递(地址值)
(12)问题:JS引擎如何让管理内存?
1.内存声明周期
分配小内存空间,得到它的使用权
存储数据,可以反复进行操作
释放小内存空间
2.释放内存
局部变量:函数执行完自动释放
对象:成为垃圾对象==>垃圾回收器回收

2.对象
(1).什么是对象?
多个数据的封装体
用来保存多个数据的容器
一个对象代表现实中的一个事物
(2).为什么要用对象?
统一管理多个数据
(3).对象的组成
属性:属性名(字符串)+属性值(任意类型)
方法:一种特别的属性(属性值是函数)
(4).如何访问对象内部数据?
.属性名:编码简单,有时不能用
[‘属性名’]:编码复杂,通用

        什么时候必须用['属性名']?
	   1.属性名包含特殊字符:-空格
	   2.属性名不确定

3.函数
(1)什么是函数?
具有特定功能的单条语句的封装体
只有函数是可执行,其他类型数据不可执行
(2)为什么要用函数?
提高代码复用
便于阅读交流
(3)如何定义函数?
函数声明
表达式
(4)如何调用函数?
test():直接调用
obj.test():通过对象调用
new test():new调用
test.call/apply(obj) 临时让test成为obj的方法进行调用
4.回调函数
(1)什么是回调函数
自己定义
没有调用
可执行
(2)常见的回调函数
dom事件回调函数
定时器回调函数

		 ajax回调函数
		 生命周期回调函数

5.IIFE
(1)理解
全称:Immediately-Invoked Function Expression
(2)作用
隐藏实现
不会污染外部(全局)命名空间
用于编写JS模块
6.函数中的this
(1). this是什么?

  • 一个关键字, 一个内置的引用变量
  • 在函数中都可以直接使用this
  • this代表调用函数的当前对象
  • 在定义函数时, this还没有确定, 只有在执行时才动态确定(绑定)的

任何函数本质上都是通过某个对象来调用的,如果没有直接指定就是window
所有函数内部都有一个变量this
它的值是调用函数的当前对象
(2). 如何确定this的值?
test():window
p.test():p
new test():新创建的对象
p.call(obj):obj
6.分号问题
(1)js一条语句的后面可以不加分号
(2)是否加分号是编码风格问题, 没有应该不应该,只有你自己喜欢不喜欢
(3)需要加;的两种情况
小括号开头的前一条语句
var a = 3
;(function () {

})
错误理解: 将3看成是函数调用
var a = 3(function () {

})

 中方括号开头的前一条语句

// 情形二: 中方括号开头的前一条语句
var b = a
;[1, 3, 5].forEach(function (item) {
console.log(item)
})
错误理解:
a = b[5].forEach(function(e){
console.log(e)
})
(4)解决办法: 在行首加分号
(5)强有力的例子: vue.js库
(6)知乎热议: https://www.zhihu.com/question/20298345

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值