2019\05\27 晴
一、 JS的三种使用方式:
1、行内JS
写在html标签中的js代码
2、内部JS
写在
注:如果
六 、数组:
数组的特点:
1、数组的长度是可变的
2、数组的类型可以不一样
3、不存在下标越界
1、数组的定义
1、隐式创建
var 变量名 = [值1,值2,...];
2、直接实例化
var 变量名 = new Array(值1,值2,...);
3、实例化并指定长度
var 变量名 = new Array(size);
获取数组的长度
数组.length
2、数组的遍历
数组的遍历即依次访问数组的每一个元素 ,JS 提供三种遍历数组的方式:
1、普通 for 循环遍历
for(var i = 0; i < 数组名.length; i++) {
}
注:可以拿到undefinded的值,无法获取数组中属性对应的值
2、for ... in
for(var i in 数组) {
// i是下标或属性名
}
注:无法拿到undefinded的值,可以获取数组中属性对应的值
3、foreach
数组.foreach(function(element,index){
// element:元素;index:下标
});
注:无法获取属性对应的值与undefinded的值
* for -- 不遍历属性
* foreach -- 不遍历属性和索引中的 undefined
* for in -- 不遍历索引中的 undefined
3、数组提供的方法
push 添加元素到最后
unshift 添加元素到最前
pop 删除最后一项
shift 删除第一项
reverse 数组翻转
join 数组转成字符串
indexOf 数组元素索引
slice 截取(切片)数组,原数组不发生变化
splice 剪接数组,原数组变化,可以实现前后删除效果
concat 数组合并
函数:
函数,即方法。函数也是对象。
七、 1、函数的定义
定义方式有3种:
1、函数声明语句
function 函数名([形参]) {
}
调用:函数名([实参]);
2、函数定义表达式
var 变量名/函数名 = function([形参]){
}
调用:变量名([实参])/函数名([实参]);
3、Function构造函数
var 函数名 = new Function('参数1','参数2','函数的主体内容');
调用:函数名([实参]);
注:构造韩束的最后一个参数是函数体。
注意:
1、js 中的函数没有重载,同名的函数,会被后面的函数覆盖。
2、js 中允许有不定数目的参数,后面介绍 arguments 对象
函数名的提升(了解)
JavaScript 引擎将函数名视同变量名,所以采用 function 命令声明函数时,整个函数会像变量声明一样,被提升到代码头部。所以,下面的代码不会报错
但是,如果采用赋值语句定义函数,JavaScript 就会报错。
函数的参数、调用和return
参数
函数运行的时候,有时需要提供外部数据,不同的外部数据会得到不同的结果,这种外部
数据就叫参数,定义时的参数称为形参,调用时的参数称为实参
1、实参可以省略,那么对应形参为 undefined
2、若函数形参同名(一般不会这么干):在使用时以最后一个值为准。
3、可以给参数默认值:当参数为特殊值时,可以赋予默认值。
4、参数为值传递,传递副本 ;引用传递时传递地址,操作的是同一个对象
八、 函数的调用
1、常用调用方式:函数名([实参]);
存在返回值可以变量接收,若接收无返回值函数则为 undefined
2、函数调用模式
3、方法调用模式
4、call()和apply()
注:谁调用函数,this就指向谁
匿名函数立即调用
(1)匿名函数:function ([参数]){}
(2)调用:(function ([形参]) {})([实参]);
在函数只被使用一次的情况下可以使用这种方式,简便省事
return 语句
函数的执行可能会有返回值,需要使用 return 语句将结果返回。return 语句不是必需的,
如果没有的话,该函数就不返回任何值,或者说返回 undefined。
作用:在没有返回值的方法中,用来结束方法。
有返回值的方法中,一个是用来结束方法,一个是将值带给调用者。
九、 arguments 对象和函数的方法及属性
arguments对象可以得到函数的实参数量
函数名.name 得到函数名称
函数名.length 得到函数的形参数量
函数名.toString() 得到函数的源码
十、 函数的作用域
函数作用域:全局(global variable)和局部(local variable)
1)全局变量与局部变量同名问题
2)在函数中定义变量时,若没有加 var 关键字,使用之后自动变为全局变量
3)变量作用域提升
十一、 闭包的形成:
1、外部函数内部嵌套内部函数
2、内部函数中使用外部函数的环境
3、外部函数返回内部函数
闭包的作用:
1、获取函数内部的变量
2、保存变量的值在内存中
3、避免变量名重复
十二、 Date:
//获取
◦ getFullYear()年, getMonth()月, getDate()日,
◦ getHours()时,getMinutes()分,getSeconds()秒
//设置
◦ setYear(), setMonth(), …
◦ toLoacaleString()
说明:
1.getMonth():得到的值:0~11(1 月~12 月)
2.setMonth():设置值时 0~11
3.toLocaleString():可根据本地时间把 Date 对象转换为字符串,并返回结果。
十三、 JS对象
JS中一切数据皆对象。
1、定义对象
JS 创建自定义对象,主要通过三种方式:
1、字面量形式创建对象
var 变量名 = {}; // 空对象
var 变量名 = {键:值,....};
2、通过 new Object 对象创建
var 变量名 = new Object();
3、通过 Object 对象的 create 方法创建对象
var 变量名 = Object.create(null或对象);
2、对象的序列化和反序列化
序列化即将 JS 对象序列化为字符串,反序列化即将字符串反序列化为 JS 对象。JS 中通过
调用 JSON 方法,可以将对象序列化成字符串,也可以将字符串反序列化成对象 。
序列化对象,将对象转为字符串
JSON.stringify(object)
反序列化,将一个 Json 字符串转换为对象。
JSON.parse(jsonStr)
3、eval()
1、可借助 eval()动态函数,将参数字符串解析成 js 代码来执行,只接受原始字符串作为参数
eval(“console.log(‘你好’)”);//控制台输出你好
2、可将 json 串转为 json 对象
1)第一种解析方式:得到的 json 对象名就是 jsonObj
eval("var jsonObj = " + jsonStr);
2)第二种解析方式:对象中有多个属性
var jsonObj = eval("(" + jsonStr + ")");
由于 json 是以{ }的方式来开始以及结束的,在 eval 中会被当成一个语句块来处理,故必 须强制将它转换成一种表达式。加上圆括号是使 eval 函数在处理时强制将括号内的表达式转化为对象而不作为语句来执行。
3)第二种解析方式:对象中只有一个属性
eval(jsonStr);