js基础
历史/概况
流程图
基础语法
注释
- 单行
- 多行
- 文档注释
语句
表达式
- 定义:有值的东西都是表达式
变量
-
关键字
- function
- var
- let
- const
-
class
- 内部自己进行严格模式‘’
-
所有的变量都是在栈里面创建
数据类型
-
基本
-
null
- typeof得到的是object
-
undefined
-
number
- NaN
- infinite
-
string
- boolean
- symbol,用来做属性名称的,唯一的,防止命名冲突
-
-
引用
- object
-
假值(隐式转换为false):null、undefined、0、NaN、""、false
直接转换的函数都是真值
数据类型的转换
- 期望是什么,就往哪个方向转
运算符(所有的运算符都有运算结果)
-
一目
- +
- -
- ++
- !
- ~(位运算)
-
二目
- +
- -
- *
- **
- /
- %
- =
- instanceOf
- ==/===
- !=/!==
- >/>=
- </<=
- &&/& (找假值)
- ||/| (找真值)
-
三目
- 布尔表达式?表达式:表达式;
流程控制语句
条件
- if
- switch
循环
- for
- while
- do while
continue
break
函数基础
创建
- let foo=function(){}
- function foo(){}
- let foo=new Function();
调用
- 函数()
三要素
-
函数名
- 动宾
- 动
-
参数:让函数活起来。
-
形参
- 普通
- 默认值
-
不定参(...):接剩下的所有参数
- 不定参只能放在最后
- 不定参只能有一个
-
实参(传入有值的东西)
-
arguments(生成的时候放在当前执行上下文上)
- 一个接受所有实际参数的伪对象数组
- 注意:箭头函数没有arguments
-
-
返回值
-
return
- 一个作用结束函数执行
- 将一个值返回函数调用处。
-
解构赋值
数组
- let [a,...b=99,c]=[1,2,3,4,5,6,7,8,9]
- let a,b,c; [a,...b=99,c]=[1,2,3,4,5,6,7,8,9];
对象
- let {name:a=10,age,gender:b,phone=77}={name:1,age:2,gender:3};
- let a,age,b,phone; ({name:a=10,age,gender:b,phone=77}={name:1,age:2,gender:3});
数组解构
对象结构
扩展运算符
...
数组扩展
- let a=[...[1,2,3],...[4,5,6]]
- Math.ma(...[1,2,3,4,5,6,7,8]);
对象扩展
- let obj = {...{name:"zs " ,gender:"male"},,..{age:18,name:"ls"}}将两个对象融合在一起了,重复的后面覆盖前面的。
函数进阶
函数作用域(局部作用于),韩珊瑚/方法中的this的确定,函数提升和变量提升,回调函数,递归函数,life
作用域
- 全局作用域
-
局部作用域
- 函数级作用域
-
块级作用域
- 是Es6单独提出来的,所用ES6声明变量的关键字都支持
this
- new
函数提升和变量提升
- 概念
- 原理
回调函数
- function foo(fn,a){fn();}
- 把一个函数作为参数传入另外一个函数,前面那个函数就叫做回调函数,后面那个函数就被叫做高阶函数。
递归函数
- 当一个函数通过,直接或则间接的方式,调用自己本身,那么着这个函数就叫做递归函数,递归函数一般需要一个递归出口。
life,立即执行函数
- 重点:前面的函数怎么把它表达式化
箭头函数
引用类型
对象
-
创建
- let obj = {name:"23"};
- let obj = new Object();
-
属性和方法
- let age =18,key = "gender";let obj = {name:"zs",age,[key]:"male"(这是以变量的形式传入值),get color(return "red"),set color(value)}//key可以是一个字符串表达式
- 方法是特殊的属性,属性值是函数时,这个属性就叫做方法。
-
属性和方法的访问
-
属性名有两种
- 字符串
- symbol:唯一的,创建的名字相同,也是不同的。
-
.
- obj.name/obj.age
- obj.3,错误,点调用是不能访问命名法错误的方法。
-
[]
- obj[key]:key可以是字符串表达式
-
数据解构
-
数组
-
特点
- 有序
-
创建
- let arr = [1,2,3;]
- let arr =new Array();
-
特性
-
索引
-
Index
-
访问
- console.log(arr);
-
添加
- arr[7]=10
-
修改
- arr[1]=77
-
删除
- delece arr[1];数组长度无变化
-
-
下列操作都是基于数组:【1,2,3,4】
-
-
长度
-
length
-
删除
- arr.length = 0
-
增加(空位子)
- arr.length = 10
-
-
-
-
数组的API
-
基本
-
增删查改
- push/unshift
- pop/shift/splice
- find/indexOf/includes
- 修改都是使用下标修改
-
连接
- concat
-
拼接
- join
-
扁平化
- flat,将数组嵌套的变化为平一级,每一次往上平一级
-
反转
- reverse,数组反转
-
-
遍历
- foreach
-
filter
- 过滤满足条件的数据
-
some
- every
-
readuce/reduceRight
- 迭代,一开始获取2个数据,结合换成一个再跟下一个结合,以此类推,完成。
-
-
数组静态方法
- from:能将多数可迭代数据装换为数组
-
-
set
- 介绍
-
API
- add(item);添加信息,独有。**
- 链式调用:s.add(item).add(item)......;
-
删除 delete(item) remove:
- s.delete(6);
- console.log(s);
-
查 has():返回Boolean值 s.has(item);
- 清空 clear();:s.clear();清空所有的元素
- 遍历 for of 、forEach():
-
map
- 介绍
-
API
- clear
- delete
- forEach
- get
- has
- set
内置对象
构造器对象:Object、Boolean、String、Number、Function、Array、RegExp、Date、Error;
还有剩下3个对象:Math、JSON、全局对象。
包装对象:都是在点的时候自动发生。
- 三种原始类型的值:数值、字符串、布尔值,在特定条件下,也会自动转为对象,也就是原始类型的“包装对象”( wrapper )
- 所谓“包装对象”,是指与数值、字符串、布尔值分别相对应的 Number、String、Boolean 三个内置对 象。这三个内置对象可以把原始类型的值转换成(包装成)对象;同样的,包装后的对象也能转换成 (解包装成)原始类型的值;这个过程在?定条件下可以?发的完成,我们就可以称这两个过程分别 为“自动装箱”和“自动拆箱”
包装对象:都是在点的时候自动发生。
- 三种原始类型的值:数值、字符串、布尔值,在?定条件下,也会?动转为对象,也就是原始类型的“包装对象”( wrapper )
- 所谓“包装对象”,是指与数值、字符串、布尔值分别相对应的 Number、String、Boolean 三个内置对 象。这三个内置对象可以把原始类型的值转换成(包装成)对象;同样的,包装后的对象也能转换成 (解包装成)原始类型的值;这个过程在?定条件下可以?发的完成,我们就可以称这两个过程分别 为“自动装箱”和“自动拆箱”
两种包装对象共同具有的方法:valueOf() 和 toString()。
Error对象
-
ECMAScript 定义了六种类型的错误。除此之外,还可以使? Error 构造?法创建?定义的 Error 对象,并使用 throw 语句抛出该对象。使用 try-catch-finally 语句处理异常
- //捕获错误try{console.log(a)}catch(e){//提示错误console.log(e.toString();//继续抛出 throw e)}finally{ console.log("finally");}
-
ReferenceError :找不到对象时
- TypeError :错误的使?了类型或对象的?法时
- RangeError :使?内置对象的?法时,参数超范围
- SyntaxError :语法写错了
- EvalError :错误的使?了 Eval
- URIError : URI 错误
Data
RegExp
变量环境
词法环境