首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JavaScript高级之基础总结深入

1.基础总结深入

a)数据类型

i.分类

1.基本(值)类型

a)Number:任意数值

b)String:任意文本

c)Boolean:true/false

d)Underfined:underfined

e)Null:null

2.对象(引用类型)

a)Object:任意对象

b)Array:特别的对象类型(下标/内部数据有序)

c)Function:特别的对象类型(可执行)

ii.判断

1.Typeof:

a)可以区别: 数值, 字符串, 布尔值, undefined, function

b)不能区别: null与对象, 一般对象与数组

2.Instanceof

a)专门用来判断对象数据的类型: Object, Array与Function

3.===

可以判断: undefined和null

iii.相关问题

1.undefined与null的区别?

a)undefined代表变量没有赋值

b)null:代表变量赋值了, 只是值为null

2.什么时候将变量赋值

a)初始化赋值: 将要作为引用变量使用, 但对象还没有确定

b)结束时: 将变量指向的对象成为垃圾对象

3.理解变量类型和数据类型

a)js的变量本身是没有类型的, 变量的类型实际上是变量内存中数据的类型

变量类型:

基本类型:保存基本类型数据的变量

引用类型:保存对象地址值的变量

值的变量:

数据对象:基本类型和对象类型

b)数据,变量与内存

i.什么是数据

存储于内存中代表特定信息的'东东', 本质就是0101二进制,具有可读和可传递的基本特性万物(一切)皆数据, 函数也是数据

程序中所有操作的目标: 数据(算术运算,逻辑运算,赋值,调用函数传参)

ii.什么是内存

内存条通电后产生的存储空间(临时的)产生和死亡: 内存条(集成电路板)==>通电==>产生一定容量的存储空间==>存储各种数据==>断电==>内存全部消失

内存的空间是临时的, 而硬盘的空间是持久的

分配内存: 声明变量和函数或创建对象时, JS引擎会自动为此分配一定大小的内存来存放对应的数据

释放内存: 清空内存中的数据, 标识内存可以再分配使用(内存不释放就不能复用)

自动释放: 栈空间的局部变量

垃圾回调器回调: 堆空间的垃圾对象

一块内存包含2个数据

内部存储的数据(一般数据/地址数据)

内存分类:

栈:全局变量,局部变量(空间较小)

堆:对象(空间较大)

iii.什么是变量

*值可以变化的量, 由变量名与变量值组成

*一个变量对应一块小内存, 变量名用来查找到内存, 变量值就是内存中保存的内容

iv.内存,数据,变量三者之间的关系

*内存是一个容器, 用来存储程序运行需要操作的数据

*变量是内存的标识, 我们通过变量找到对应的内存, 进而操作(读/写)内存中的数据

相关问题:

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

* xxx是一个基本数据

* xxx是一个对象

* xxx是一个变量

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

* 2个引用变量指向同一个对象, 通过一个引用变量修改对象内部数据, 另一个引用变量也看得见

* 2个引用变量指向同一个对象,让一个引用变量指向另一个对象, 另一个引用变量还是指向原来的对象

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

*只有值传递, 没有引用传递, 传递的都是变量的值,只是这个值可能是基本数据, 也可能是地址(引用)数据

*如果后一种看成是引用传递, 那就值传递和引用传递都可以有

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

1.内存生命周期

1).分配需要的内存

2).使用分配到的内存

3).不需要时将其释放/归还

2.释放内存

*为执行函数分配的栈空间内存: 函数执行完自动释放

*存储对象的堆空间内存: 当内存没有引用指向时, 对象成为垃圾对象, 垃圾回收器后面就会回收释放此内存

c)对象

1.什么是对象?

*代表现实中的某个事物, 是该事物在编程中的抽象

*多个数据的集合体(封装体)

*用于保存多个数据的容器

2.为什么要用对象?

*便于对多个数据进行统一管理

3.对象的组成

*属性

*代表现实事物的状态数据

*由属性名和属性值组成

*属性名都是字符串类型, 属性值是任意类型

*方法

*代表现实事物的行为数据

*是特别的属性==>属性值是函数

//创建对象

var p = {

name: 'Tom',

age: 12,

setName:function (name) {

this.name =name

},

setAge:function (age) {

this.age =age

}

}

//访问对象内部数据

console.log(p.name, p['age']);

p.setName('Jack')

console.log(p['name'], p.age);

4.如何访问对象内部数据?

* .属性名: 编码简单, 但有时不能用

* ['属性名']: 编码麻烦, 但通用

什么时候必须使用['属性名']的方式访问对象内部数据?

*属性名不是合法的标识名

*属性名不确定

var p = {}

/*情形一: 属性名不是合法的标识名*/

/*需求: 添加一个属性: content-type: text/json */

// p.content-type = 'text/json' //不正确

p['content-type']= 'text/json'

/*情形二: 属性名不确定*/

var prop = 'xxx'

var value = 123

// p.prop =value //不正确

p[prop] = value

console.log(p['content-type'], p[prop])

d)函数

1.什么是函数?

*具有特定功能的n条语句的封装体

*只有函数是可执行的, 其它类型的数据是不可执行的

*函数也是对象

2.为什么要用函数?

*提高代码复用

*便于阅读和交流

3.如何定义函数?

*函数声明

function f1 () { //函数声明

console.log('f1()')

}

*表达式

var f2 = function () { //表达式

console.log('f2()')

}

4.调用(执行)函数

* test()

* new test()

* obj.test()

*test.call/apply(obj)

5.回调函数

1.什么函数才是回调函数?

*你定义的

*你没有直接调用

*但最终它执行了(在特定条件或时刻)

2.常见的回调函数?

* DOM事件函数

*定时器函数

* ajax回调函数(后面学)

*生命周期回调函数(后面学)

6.IIEF

1.理解

*全称: Immediately-Invoked Function Expression 立即调用函数表达式

*别名: 匿名函数自调用

2.作用

*隐藏内部实现

*不污染外部命名空间

(function(i) {

vara=4

functionfn() {

console.log('fn ', i+a)

}

fn()

})(3)

7.补充

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180507G0ZVZA00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券