一
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() 是一个函数,用于引入其它模块,得到暴露的对象