JavaScript高级教程

基础总结深入

数据类型

分类

you are so nb!

undefined :undefined

string :任意字符串

sybmol:

object:任意对象,函数(一种特别的对象,可以执行)、数组(一种特别的对象,内部数据是有序的)都是object

null:null

boolean:true/false

判断

typeof :返回数据类型的字符串表达式 ,

可以判断 undefined/数值/字符串/Boolean/function

不能判断 null和undefined object与array

instanceof:判断对象的具体类型,返回一个Boolean,

全等和等等:可以判断undefined,null

相关问题

1、undefined与null的区别?

undefined 代表定义未赋值

null 代表定义了值为null

2、什么时候给变量赋值为null?

1.初始赋值,表面要赋值为对象

2.结束时赋值,为了让对象成为对象,使其被垃圾回收器回收

3、严格区别变量类型与数据类型?

数据的类型:

基本类型、对象类型

变量的类型(变量内存值的类型):

基本类型:保存就是基本类型的数值、

引用类型:保存的是地址值

数据、变量与内存

1、什么是数据?

存储在内存中代表特定信息的东西,本质上是01

2、什么是内存?

内存条是通电后产生的可存储数据的空间(临时储存)

3、什么是变量?

可变化的量=变量名+变量值

每个变量都对应一块内存,变量名用来查找对应的内存,变量值内存中保存的数值数据

4、内存、数据、变量之间的关系

内存用来存储数据的空间

变量是内存的标识

相关问题

关于赋值与内存的问题?

var a=xxx,a中保存的是什么?

如果xxx是基本数据,保存是这个数据

如果xxx是对象,保存的是对象的地址值

如果xxx是一个变量,保存的是xxx的内存内容(可能是基本数据,也可能是地址值)

关于引用变量赋值问题?

n个引用变量指向同一个对象,通过一个变量修改对象内部数据,其他所有变量看到的是修改后的数据

var obj1={name:"tom"}

var obj2=obj1

obj2.age=12

console.log(obj1.age)//12

function fn(obj){

obj.name='a'

}

fn(obj1)

console.log(obj2.name)//tom

2个引用变量指向同一个对象,让其中一个引用变量指向另一个对象,另一引用变量依然指向前一个对象

var a={age:12}

var b=a

a={name:"嗯嗯嗯",age:13}

console.log(b,a.name,a.age)//{age:12},嗯嗯嗯,13

function fn2(obj){

obj={age:15}

return obj

}

fn2(a)

console.log(a)//{name:"嗯嗯嗯",age:13}

console.log(fn2(a))//{age:15}

关于数据传递问题?

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

理解一:都是值(基本/地址值)传递。只是值可能为基本值也可能为地址值

理解二:可能是值传递,也可能是引用传递(地址值)

var a =2

function fn(a){

a=a+1

}

fn(a)

console.log(a)//2

function fn2(obj){

console.log(obj.name)//tom

}

var obj={name:"tom"}

fn2(obj)

js引擎如何管理内存?

1、内存生命周期

分配小内存空间,得到他的使用权

存储数据,可以反复进行操作

释放小内存空间

2、释放内存

局部变量:函数执行完自动释放

对象:成为垃圾对象==>垃圾回收器回收

对象

1、什么是对象?

对个数据的封装体

用来保存多个数据的容器

一个对象代表现实中的一个事物

2、为什么要用对象?

统一管理多个数据

3、对象的组成

属性:属性名(字符串)和属性值组成

方法:一种特别的属性(属性值是函数)

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

.属性名,有时候不能用(1、属性名包含特殊字符: - 空格 2、属性名不确定)

例如:p['content-type']='text/json'

['属性名'],通用

函数

什么是函数?

实现特定功能的多条语句的封装体

只有函数是可以执行的,其他类型的数据不能执行

为什么要用函数?

提高代码复用

便于阅读交流

如何定义函数?

test():直接调用

obj.test():通过对象调用

new test():new调用

test.call/apply(obj):临时让test成为obj的方法进行调用

如何调用(执行)函数?

函数中的this?

任何函数本质上都是通过某个对象进行调用的,如果没有直接指定就是window

所有函数内部都有一个变量this

他的值是调用函数的当前对象

如何确定this的值?

test():window

p.test(): p

new test():新创建的对象

p.call(obj): obj

函数高级

原型与原型链

执行上下文与执行上下文栈

变量提升

1、变量声明提升

通过var定义(声明)的变量,在定义语句之前就可以放访问到

值:undefined

2、函数声明提升

通过function声明的函数,在之前就可以直接调用

值:函数定义(对象)

3、变量提升和函数提升是如何产生的?

函数提升必须用函数声明的方法进行声明

变量提升的方法声明函数函数不能直接调用,会转变成变量提升

执行上下文

1、代码分类(位置)

全局代码

函数(局部)代码

2、全局执行上下文

在执行全局代码前将window确定为全局执行上下文

对全局数据进行预处理

var定义的全局变量==》undefined,添加为window属性

function声明的全局函数==》赋值(fun),添加为window的方法

this==》赋值(window)

开始执行代码

3、函数执行上下文

在调用函数,准备执行函数体之前,创建对应的函数执行上下文对象,对局部数据进行预处理

形参变量 赋值(实参)

作用域与作用域链

闭包

1、如何产生闭包?

当一个嵌套的内部(子)函数引用了嵌套的外部(父)函数的变量(函数)时,就产生了闭包

2、闭包是什么?

函数嵌套+内部函数引用了外部函数的变量

理解一:闭包就是嵌套的内部函数(绝大部分)

理解二:包含被引用变量(函数)的对象

注意:闭包存在于嵌套的内部函数中

3、产生闭包的条件?

函数嵌套

内部函数引用了外部函数的数据(变量/函数)

4、闭包的作用?

1、使用函数内部的变量再哈数执行完后,仍然存活在内存中(延长局部变量的生命周期)

2、让函数外部可以操作(读写)到函数内部的数据(变量/函数)

内存溢出与内存泄漏?

1、内存溢出:

一种程序运行出现的错误

当程序运行需要的内存超过了剩余的内存时,就爆出内存溢出的错误

2、内存泄漏

占用的内存没有及时释放

内存泄漏积累多了就容易导致内存溢出

常见的内存泄漏:

意外的全局变量

没有及时清理的计时器或者回调函数

闭包

例题:

var name= "the window"

var object={

name:"my object",

getname: function(){

return function(){

return this.name

}

}

}

alert(object.getname()()) // the window

var name2="the window"

var object2={

name:"my object",

getname: function(){

var that=this

return function(){

return that.name

}

}

}

alert(object2.getname()()) //my object

面向对象高级

工厂模式创建对象

套路:通过工厂函数动态常见对象并返回

适用场景:需要创建多个对象

问题:对象没有一个具体的类型,都是object类型

function createPerson(name,age){

var obj={

name:name,

age:age,

serName:function(name){

this.name=name

}

}

return obj

}

//创建两个人

var p1=createPerson("lisa",34)

var p2=createPerson("bob",24)

自定义构造函数模式

套路:自定义构造函数,通过new创建对象

适用场景:需要创建多个类型确定的对象

问题:每个对象都有相同的数据,浪费内存

function Person(name,age){

this.name = name

this.age = age

this.Setname= function(name){

this.name = name

}

this.Setage = function(age){

this.age=age

}

}

var lisa=new Person("lisa",12)

lisa.Setage(24)

console.log(lisa)

构造函数+原型组合模式

套路:自定义构造函数,属性在函数中初始化,方法添加到原型上

适用场景:需要创建多个类型确定的对象

function Person(name,age){

this.name = name

this.age = age

}

Person.prototype.Setname=function(name){

this.name = name

}

var p1 = new Person("tom",13)

var p2 = new Person("jack",44)

console.log(p1,p2)

原型链继承

套路

1、定义父类型构造函数

2、给父类型的原型添加方法

3、定义子类型的构造函数

4、创建父类型的对象赋值给子类型的原型

5、将子类型原型的构造属性设置为子类型

6、给子类型原型添加方法

7、创建子类型的对象:可以调用父类型的方法

关键

子类型的原型为父类型的一个实例对象

线程机制与事件机制

进程与线程

进程:程序的一次执行,它占有一片独有的内存空间

线程:是进程呢的一个独立执行单元、是程序执行的一个完整流程、是CPU的最小调度单元

相关知识:

应用程序必须运行在某个进程的某个线程上

一个进程中至少有一个运行的线程:主线程,进程启动后自动创建

一个进程中也可以同时运行多个线程,我们会说程序是多线程运行的

一个进程内的数据可以供其中的多个线程直接共享的

多个进程之间的数据是不能直接共享的

线程池:保存多个线程对象的容器,实现线程对象的反复利用

何为多进程多线程?

多进程运行:一个应用程序可以同时启动多个实例运行

多线程:在一个进程内,同时有多个线程运行

比较单线程与多线程?

浏览器内核

Chorme,Safari:webkit

Firefox:Gecko

IE:Trident

360,搜索等国内浏览器:Trident+webkit

JavaScript高级教程的更多相关文章

  1. javascript高级教程:如何优化javascript代码性能

    在web前端开发中,为实现一些动态效果,减小页面大小,我们一般都会使用JavaScript技术来进行相关设置.但是初学者在编写JavaScript代码的时候,往往都是比较低质的代码,那如何才能提高Ja ...

  2. 《JavaScript高级教程》学习笔记一、变量和数据类型

    JavaScript的核心语言特性在ECMA-262中是以名为ECMAScript的伪语言的形式来定义的. 一.变量和数据类型 1. 变量 JavaSript是弱类型语言,可以通过var定义任何类型变 ...

  3. javaScript高级教程(九) ------javascript对象字面量--------困扰已久的问题

    在编程语言中,字面量是一种表示值的记法.例如,"Hello, World!" 在许多语言中都表示一个字符串字面量(string literal ),JavaScript也不例外. ...

  4. javaScript高级教程(八)-----正则表达式温故知新

    1.RegExp对象:五个属性二个方法 五个属性:global, ignoreCase,multiline,lastIndex,source 二个方法: exec()--模式匹配 test()--检测 ...

  5. javaScript高级教程(七)正则表达式中括号三种常见作用

    括号用来将子表达式标记起来,以区别于其他表达式 比如很多的命令行程序都提供帮助命令,键入 h 和键入 help 的意义是一样的,那么就会有这样的表达式: h(elp)? 字符h之后的elp可有可无这里 ...

  6. javaScript高级教程(五) Event Flow

    1.两个阶段三个模型:Netscape支持事件捕获,IE支持事件冒泡,w3c是先捕获后冒泡 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 S ...

  7. javaScript高级教程(十) iframe

    1.iframe的基础,深入理解frame是何物,属性该如何设置. iframe即内联框架.不同于frame,frame与frameset综合使用,成为帧,框架集.frame已经不大使用了.说白了,f ...

  8. javaScript高级教程(六) 获取窗口,屏幕,文档信息

    1.屏幕坐标:相对于桌面左上角 窗口坐标:相对于窗口的左上角 文档坐标:相对于html文档左上角 当有滚动条时,窗口坐标与文档坐标之间有区别

  9. javaScript高级教程(四) 复制对象

    //返回新对象,双方互不影响 function clone(obj){ //alert('clone'); if(typeof(obj) != 'object') return obj; if(obj ...

随机推荐

  1. 把EI科技 【载谈 Binomial Sum】 用人话说出来

    这个科技是用来 \(O(k+\log n)\) 求 \(\sum_{i=0}^n [x^i] f(x)p^i(x) \mod x^{k+1}\) 这个多项式的某些项数的线性组合 不过我只见过求第 $ ...

  2. PEP小学五年级英语下册 mp3 音频和电子书

    链接:https://pan.baidu.com/s/1O805uHU-lsMKog3WLtjRkA 提取码:o8rg 链接:https://pan.baidu.com/s/1Oa4wcM5min83 ...

  3. 【面经】MySql常见问题

    1. 数据库三范式是什么? 1. 第一范式(1NF):字段具有原子性,不可再分.(所有关系型数据库系统都满足第一范式数据库表中的字段都是单一属性的,不可再分) 2. 第二范式(2NF)是在第一范式(1 ...

  4. (九)React Ant Design Pro + .Net5 WebApi:后端环境搭建-IdentityServer4-简单配置

    一.简介 IdentityServer4 是用于 ASP.NET Core 的 OpenID Connect 和 OAuth 2.0 框架,通过中间件的方式集成.JWT(json web token) ...

  5. JavaWeb 03_创建servlet项目(详细)

    一.创建web项目 1. File--New--Project 2. 设置项目相关信息 3. 设置项目名称及工作空间 4. web项目目录结构如下 二.Servlet的实现 1. 新建包---类    ...

  6. kubernetes允许master调度

    1,让 Master 也当作 Node 使用 (1)如果想让 Pod 也能调度到在 Master(本样例即 localhost.localdomain)上,可以执行如下命令使其作为一个工作节点: 注意 ...

  7. MATLAB批量打印输出600PPI的图像且图像不留空白

    一 前言 最近收到审稿人的修改意见,其中有三条:一条为<RC: There were only five images evaluated in the experiment, and I re ...

  8. 基于COLA架构的电商财务系统-总

    财务 清算-clearing 对账-check 结算-settle 平账-correct 划拨-remit 包划分 按照COLA规则进行划分,综合考虑功能和领域两个维度包结构定义 技术参考 dddpl ...

  9. 通过Kuberneters Goat学习K8S安全(上)

    实验环境:https://katacoda.com/madhuakula/scenarios/kubernetes-goat 0x1.敏感信息泄露利用 第一关是代码泄露利用,打开网站后显示: 告诉我们 ...

  10. pg数据库org.postgresql.util.PSQLException: ERROR: "xxx" is not a sequence

    问题场景 对pg数据表执行插入语句的时候,报错如下: { "timestamp": 1587012576734, "status": 500, "er ...