1
- 新数组应该从0开始 一次递增
函数
函数不调用不执行
认识函数
-
函数是做什么的
大量代码重复使用,函数封装了一段可以重复使用的代码块
-
声明函数用什么关键词
function 函数名(){
}
函数名()
-
如何调用函数
函数名()
-
封装是什么意思
打包 把函数整合到一个整体
函数的参数
function 函数名(形参1,形参2…){
}
函数名(实参1,实参2…)
形参是接受实参的
函数的参数可以有也可以没有
函数返回值
函数只是实现某种功能,最终的结果需要返回给函数的调用者函数名()通过return实现
只要函数遇到return 就把后面的结果
- return 终止函数
- return 只能返回一个值.如果用逗号隔开,以最后一个为准
- 函数如果有return,则返回的是函数后面的值,如果没有return则返回undefined
break 结束当前循环(如 for while)
continue 跳出本次循环,继续执行下次循环(如 for while)
return 不仅可以退出循环,还能够返回return语句中的值,同时还可以结束当前的函数内的代码
arguments
只有函数才有arguments对象 二球每个函数都内置好了arguments
伪数组 并不是真正意义上的数组
- 具有数组的length属性
- 按照索引的方式进行存储的
- 它没有真正数组的一些方法 例如:pop() push() 等
函数声明
- fun是变量名 不是函数名
- 函数表达式声明方式跟声明变量差不多,只不过变量里面存的是指 而函数表达是里面存的是函数
- 函数表达式也可以进行传递参数
作用域
-
js作用域 就是变量在某个范围内起作用和效果 目的是为了提高程序的可靠性 更重要的是减少命名冲突
-
js的作用域(es6)之前:全局作用域 局部作用域
-
全局作用域:整个script标签 或者单独的js文件
-
局部作用域 在函数内部作用域 这个代码的名字只在函数内部起效果和作用
变量的作用域
变量的作用域: 根据作用域的不同 变量分为全局变量和局部变量
- 全局变量: 在全局作用域下的变量 在全局下都可以使用
- 局部变量: 在局部作用域下的变量 后者在函数内部使用的变量
- 从执行效率来看全局变量和局部变量
- 全局变量只有浏览器关闭的时候才会销毁,比较占内存资源
- 局部变量 当我们程序执行完毕就会销毁,比较节约内存资源
- 块级作用域(es6) {块级作用域} 花括号里的
作用域链
根据内部函数可以访问外部函数的变量, 采用的是链式查找的方式来决定去巴格之 这种结构称为作用域链 就近原则
js预解析
js代码是通过浏览器中的js解释器运行的
- js引擎运行加上代码分为两步: 预解析 代码执行
- 预解析 js引擎会把js里面所有的var还有function提升到当前作用域的最前面
- 代码执行 按照代码书写的顺序从上往下执行
- 预解析分为 变量预解析(变量提升) 和 函数预解析(变量提升)
- 变量提升 就是把所有的变量声明提升到当前的作用域最前面 不提升赋值操作 (即只提升变量声明不提升赋值)
- 函数提升 就是把所有的函数声明提升到当前作用域的最前面 不调用函数
js对象
在js中 对象是一组相关属性和方法的集合,所有的失误都可以是对象。 对象是由属性和方法组成的
创建对象
-
利用对象字面量创建对象{}
var obj={}
(1) 里面的属性或者方法采取键值对的形式 键 属性名:值 属性值
(2) 多个属性或者方法中间用逗号隔开的
(3) 方法冒号后面跟的是一个匿名函数
-
使用对象
(1)用 . 调用对象的属性 我们采取 对象名.属性 . 理解为 的
(2)调用属性还有一种方法 对象名[‘属性名’]
(3)调用对象的方法 sayHi 对象名.方法名()
-
变量、属性、函数、方法的区别
-
变量和属性的相同点 :都是用来存储数据的
变量 单独声明并赋值 使用的时候直接写变量名 单独存在
属性 在对像里面的不需要声明 使用的时候必须是 对象.属性
-
函数和方法的相同点 都是实现某种功能 做某件事
函数是单独声明 并且调用的 函数名()单独存在的
方法在对象里面 调用的时候 对象.方法()
-
-
利用new Object创建对象
var obj=new Object()
- 利用等号 = 赋值的方法 添加对象的属性和方法
- 每个属性和方法之间用分号 ; 结束
-
利用构造函数创建对象
构造函数 : 就是把对象里面一些相同的属性和方法抽象出来封装到函数里面
function 构造函数名(){ this.属性=值 this.方法=function(){} } new 构造函数名()
- 构造函数名字首字母要大写
- 构造函数不需要return 就可以返回结果
- 调用构造函数,必须使用new
- 只要new Start() 调用函数就创建一个对象ldh{}
- 我们的属性和方法前面必须添加this
function Start(uname, age, sex){ this.name= uname; this.age= sge; this.sex = sex; this.sing=function(sang){ console.log(sang) } } var ldh=new Start("刘德华",20,"男") ldh.sing("冰雨)
-
构造函数和对象
构造函数 泛指某一大类 它类似于 java 语言里面的类(class)
对象特指 是一个具体的失误
-
new关键字执行过程
- new 构造函数可以在内存中创建一个空对象
- this 就会指向刚才创建的空对象
- 执行构造函数里面的代码 给这个空对象添加属性好方法
- 返回这个对象
遍历对象
for…in…遍历对象
for( 变量 in 对象){
}
for(var k in obj){
console.log(k) // k变量 输出 得到的是 属性名
console.log(obj[k]) //obj[k]得到的是属性值(value)
}
js内置对象
查文档 :MDN
Math对象
Math.PI() //一个属性 圆周率
Math.max(1,88,33) //函数返回一组数中的最大值 给定的参数中至少有一个参数无法被转换成数字,则会返回 NaN。 如果没有参数,则结果为 - Infinity。
Math.min() //去最小值
Math.abs() //绝对值 会把字符串型的数字转换为数值型
Math.floor() // 向下取整
Math.ceil() // 向上取整
Math.round() // 四舍五入取整 注意-3.5 结果:-3
Math.random() //返回随机小数 包头不包尾
// 得到两个数之间的随机整数 并且包含这两个整数
Math.floor(Math.random()*(max-min+1))+min
日期对象
Date() 日期对象 是一个构造函数 必须使用new 来调用日起对象
var arr=new Array()
var obj = new Object()
// 1. 使用Date 如果没有参数 返回当前系统的当前事件
var date= new Date()
// 2. 参数常用的写法 数字型 2019,10,01 或者是 字符串型 '2019-10-01 8:8:8'
var date1=new Date('2019-10-1 8:8:8')
date.getMonth()+1 // 月份 获取当前月份(0-11)
date.getDate() // 获取当天日期
date.Day() // 获取星期几(周日0 到周六6)
date.getHours() // 获取当前小时
date.getMinutes() // 获取当前分钟
date.getSeconds() // 获取当前的秒数
时间戳:1970年1月1日开始到现在的毫秒数
通过valueOf() getTime() 获得 或者 +newDate() 或者(H5新增) Date.now()
倒计时:
d=parseInt(总秒数/60/60/24); // 计算天数
h=parseInt(总秒数/60/60%24); // 计算小时
m=parseInt(总秒数/60%60); // 计算分钟
s=parseInt(总秒数%60); //计算当前秒数
function countDown(time){
var nowTime= +new Date(); // 返回当前事件总的毫秒数
var inputTime = +new Date(time); // 返回的是用户输入时间总的毫秒数
var times = (inputTime-nowTime)/1000 // times 是剩余时间总的秒数
var d=parseInt(times/60/60/24); // 计算天数
d=d<10?'0'+d:d
var h=parseInt(times/60/60%24); // 计算小时
var m=parseInt(times/60%60); // 计算分钟
var s=parseInt(times%60); //计算当前秒数
return d+"天"+h+"时"+m+"分"+s+"秒"
}
console.log(countDown('2019-11-8 20:00:10'))
数组对象
创建数组
- var arr=[]
- var arr1= new Array()
检测数组
-
instanceof 运算符 可以用来检测是否为数组
arr instanceof Array 布尔值
-
Array.isArray(参数) h5新增的方法 ie9 才支持
添加删除数组
-
push() 在数组的末尾 添加一个或者多个数组元素 push 推
- push 是可以给数组的后面追加新的元素
- push() 参数直接写 数组元素就可以了
- push完毕之后,返回的结果是 新数组的长度
- 原数组也会发生变化
-
unshift 在数组的开头 添加一个或者多个数组元素
- unshift 是可以给数组的前面追加新的元素
- unshift () 参数直接写 数组元素就可以了
- unshift 完毕之后, 返回的结果是 新数组的长度
- 原数组也会发生变化
-
pop() 删除数组的最后一个元素 arr.pop()
- 可以删除数组里面的最后一个元素 一次只能删除一个元素
- pop() 里面不跟参数
- 返回值是删除的元素
- 原数组会发生变化
-
shift() 它可以删除数组的第一个元素 arr.shift()
- shift可以删除数组里面的第一个元素 一次只能删除一个元素
- shift() 里面不跟参数
- 返回值是删除的元素
- 原数组会发生变化
数组翻转 arr.reverse()
数组排序(冒泡排序)
var arr1=[1,2,5,3,7];
arr1.sort(function(a,b){
return a-b // 按照升序的顺序排列
})
console,log(arr1)
数组索引
- indexOf() 数组中查找给定元素的第一个索引 如果存在则返回索引号 如果不存在 则返回-1
- lastIndexOf() 在数组中的最后一个的索引 如果存在则返回索引号 如果不存在 则返回-1
数组转字符串
- toString 把数组转换成字符串,逗号分隔每一项 返回一个字符串
- join(“分隔符”) 方法用于把数组中的所有元素转换成一个字符串 返回一个字符串
字符串对象
- 复杂数据类型才有属性和方法
-
基本包装类型
就是把简单数据类型包装成为了复杂数据类型。
-
字符串的不可变性
指的是里面的值不可变,虽然看上去可以改变内容,但其实是地址变了,内存中新开辟了一个内存空间
字符串的所有的方法,都不会修改字符串本身(字符串不可变),操作完成会返回一个新的字符串。
-
- indexOf() 数组中查找给定元素的第一个索引 如果存在则返回索引号 如果不存在 则返回-1
- lastIndexOf() 在数组中的最后一个的索引 如果存在则返回索引号 如果不存在 则返回-1
- chartAt(index) 根据位置返回字符
-
concat(str1,str2,…) contact() 方法用于连接两个或多个字符串。拼接字符串,等效于+,+更常用
-
**substr(start,length) ** 从start位置开始(索引号),length去的个数
-
substr(start,end) 从start开始,截取end位置.end取不到(索引号)
-
substring(start,end) 从start开始,截取end位置.end取不到(索引号) 不接受负值
-
替换字符串replace(‘被替换的字符串’,‘替换为字符串’) 它只会替换第一个字符
-
字符串转换为数组 split(‘分隔符’)