周回顾...

85 阅读3分钟

1.函数作用域 全局函数 局部函数 作用域链

2.递归 函数内部调用自身函数(死循环)

3.匿名函数 函数声明 function fn(){ } 函数表达式 var fun=function(){ } 匿名函数自调用 (function(){ })(); 回调函数 function tao(){ } function xin(){ } tao(xin); ta(function(){});

4.系统函数

isNaN()检测是否含有非数字 eval()执行字符串中表达式

5.对象

是一组属性和方法的集合

(1)js中:自定义 内置 宿主 (2)自定义:对象字面量 内置构造函数 自定义构造函数 (3)使用对象字面量创建对象 {属性名:属性值, 属性名:属性值....} (4)访问属性 对象.属性名 对象['属性名'] (5)内置构造函数创建对象 new Object()
(6)遍历属性 for(var k in 对象){ k 属性名 对象[k] 属性名对应的属性值 }

1.检测对象含有属性 对象.属性名===undefined
对象.hasOwnProperty('属性名')
'属性名' in 对象

2.对象方法 var person={ play: function(){ this 指调用方法的对象 } } person.play() //调用方法

3.数据存储

原始类型:存储在栈内存中,分配固定的空间大小 引用类型:存储在堆内存中,会自动生成一个地址,然后再把地址保存到栈内存中,动态分配空间大小

4.数组

1.数组字面量 [ 元素1, 元素2,... ]

2.访问元素 数组[下标]

3.数组的长度 数组.length 获取数组元素的个数

4.内置构造函数创建数组 new Array(元素1, 元素2,...) new Array( n ) 创建数组,初始化数组长度为n,可以添加更多个元素

5.数组的分类

索引数组:以>=0的整数作为下标 关联数组:以字符串作为下标,需要单独添加元素,无法使用长度属性

6.对比对象和数组的区别

两者都可以存储一组数据,对象通过属性,数组通过元素 对象的数据是无序的,不分先后;数组的数据是有序排列

7.数组的遍历

for(var k in 数组){ k 下标 数组[k] 元素 } for(var i=0;i<数组.length;i++){ i 下标 数组[i] 元素 }

1.数组API

reverse() 翻转数组元素 sort() 对数组进行排序,默认按照编码排列 concat() 拼接多个数组 slice(start,end) 截取数组元素,start开始的下标,end结束的下标 splice(start, count, v1,v2...) 删除数组元素,start开始的下标,count要删除的长度 push() 在数组的末尾添加一个或者多个元素,返回数组的长度,原数组会发生变化 pop() 删除数组末尾的一个元素,返回删除的元素,原数组会发生变化 unshift() 在数组的开头添加一个或者多个元素,返回数组的长度,原数组会发生变化 shift() 删除数组开头的一个元素,返回删除的元素,原数组会发生变化 indexOf() 查找数组中是否含有某个元素,找到返回下标,找不到返回-1

2.二维数组

[ [元素1,元素2], [元素3, 元素4].. ] 访问 数组[下标][下标]

3.字符串对象

new String() 将字符串包装为对象 String() 将一个值强制转换为字符串 转义字符 ——
改变字符本身意义 ' 将具有特殊意义的引号转为普通的引号 \n 将字符n转义为换行符 \t 将字符t转义为制表符(tab键,多个连续的空格)

4.字符串API length 获取字符串的长度 charAt(下标) 获取下标对应的字符,可以用数组写法 字符串[下标] indexOf() 查找字符串中的某个字符(串)第一次出现的位置,返回下标,找不到返回-1 lastIndexOf() 查找字符串中某个字符(串)最后一次出现的位置,返回下标,找不到返回-1 slice(start, end) 截取字符串,start开始的下标,end结束的下标 toUpperCase() 英文字母转大写 toLowerCase() 英文字母转小写 split(str) 将字符串转为数组,可以指定按照哪个字符串分隔

1.Math对象 是一个特殊的对象,不需要使用new创建可以直接调用API PI 获取圆周率 abs() 获取绝对值 ceil() 向上取整 floor() 向下取整 round() 四舍五入取整 pow(x,y) 获取x的y次方 max() 获取一组数字最大值 min() 获取一组数字最小值 random() 获取随机数,范围>=0 <1

2.Date对象 用于日期时间的存储和计算 1.创建 new Date('2021/12/16 11:48:30') new Date(2021,11,16,11,48,30) //月份011代表112月份 new Date() //当前操作系统的日期时间 new Date(1500000000000) //存储的是距离计算机元年的毫秒数

2.获取 getFullYear()/getMonth()/getDate() 月份范围 011 代表112月 getHours()/getMinutes()/getSeconds()/getMilliseconds() 毫秒 getDay() 星期,范围06 代表日六 getTime() 获取时间戳

3.转为本地字符串 用于调试,存在兼容性问题 toLocaleString() 获取完整字符串形式 toLocaleDateString() 获取日期部分 toLocaleTimeString() 获取时间部分

4.设置 setFullYear()/setMonth()/setDate() setHours()/setMinutes()/setSeconds()/setMilliseconds() setTime() 设置时间戳,产生一个新的日期时间

5.拷贝Date对象 为了不影响之前的对象 var d1=new Date(); var d2=new Date(d1); //拷贝Date对象,之间把要拷贝的对象作为参数传递 3.Numbar对象 new Number() 将数字包装为对象 Number() 将一个值强制转换为数值 toFixed(n) 保留小数点后n位

4.Boolean对象 new Boolean() 将布尔值包装为对象 Boolean() 将一个值强制转换为布尔值 !!值 将一个值隐式转换为布尔值

5.错误处理 SyntaxError:语法错误,代码书写格式不符合语法规范,例如出现了中文符号,缺少半块括号... ReferenceError:引用错误,使用了未声明的变量 TypeError:类型错误,当前调用的函数(方法)不是一个函数类型 自定义错误:程序员自己指定的错误 throw '错误内容' try{ 尝试执行,可能产生错误,不会阻止往后执行 }catch(err){ 捕获产生的错误到err中 执行错误处理 }

一.ES6

ECMAScript6 JS的第6套标准规范

1.块级作用域 let声明的变量不允许重复声明,进入到一个暂时性的死区(会提升,只是不允许访问)

2.参数增强 function fn(a,b,c=0){ b=b||0; //ES6之前的设置方式 }

3.箭头函数 sort( (a,b)=>{ return a-b; } )

4.模板字符串 模板字符串 ${JS表达式}

二.Node.js

Node.js是一种JS解释器,运行在服务器端 1.对比js:JS运行在浏览器,存在多款浏览器,有代码兼容性问题;Node.js运行在服务器端,只有一种解释器,不存在代码兼容性问题 JS用于开发浏览器端交互效果,Node.js用于服务器端开发

2.特点: 单线程处理逻辑,支持数万个并发连接

三.全局对象

1.global 检测变量或者函数是否为全局的

2.console 控制台对象,用于输出到控制台 console.log(1); //日志 console.info(2); //消息 console.warn(3); //警告 console.error(4); //错误 console.time() //开始计时 console.timeEnd() //结束计时 检测变量或者函数是否为全局的

3.process 进程对象,计算机上任何的应用程序都是有对应的进程,会占用一定的资源 process.arch 查看CPU的架构 process.platform 查看服务器端操作系统 process.version 查看服务器端Node.js版本号 process.pid 查看当前Node.js的进程编号 process.kill() 结束指定编号的进程

4.Buffer

缓冲、缓存 var buf = Buffer.alloc(5,'abcde') //创建Buffer,分配大小为5个字节,每个汉字占3个字节 buf.toString()

四.板块系统

module.exports 是模块暴露的对象,默认是一个空对象 require() 是一个函数,用于引入其它模块,得到暴露的对象