1.数组
数组的创建
var arr=[值 1,值 2,值 3]; //隐式创建
var arr=new Array(值 1,值 2,值 3); //直接实例化
var array=new Array(size); //创建数组并指定长度
基本操作
1、数组的长度可以通过 length 属性来获取,并可以任意更改
2、数组中的每一个元素都可以被访问和修改,甚至是不存在的元素,无所谓越界
数组的遍历
1、for(var i=0; i < 数组.length; i++) {}
2、for(var 下标名 in 数组) {}
3、数组.forEach(function(元素,下标){});
-
for – > 不遍历属性
-
foreach – >不遍历属性和索引中的 undefined
-
for in – >不遍历索引中的 undefined
数组中提供的常用方法
push 添加元素到最后
unshift 添加元素到最前
pop 删除最后一项
shift 删除第一项
reverse 数组翻转
join 数组转成字符串
indexOf 数组元素索引
slice 截取(切片)数组,原数组不发生变化
splice 剪接数组,原数组变化,可以实现前后删除效果
concat 数组合并
2.函数
函数的定义
有三种函数定义的方式:函数声明语句、函数定义表达式、Function 构造函数
函数声明语句
function 函数名([参数列表]) {}
调用:函数名([参数列表]);
函数定义表达式
var 变量名/函数名 = function([参数列表]) {}
调用:变量名/函数名([参数列表]);
Function 构造函数
var 变量名 = new Function(“参数1”,“参数2”,“最后一个参数为是函数体”);
调用:变量名/函数名([参数列表]);
函数的参数
实参可以省略,那么对应形参为 undefined
若函数形参同名(一般不会这么干):在使用时以最后一个值为准。
可以给参数默认值:当参数为特殊值时,可以赋予默认值。
参数为值传递,传递副本 ;引用传递时传递地址,操作的是同一个对象。函数的调用 常用调用方式:函数名([实参]); 存在返回值可以变量接收,若接收无返回值函数则为 undefined 1、函数调用模式 2、方法调用模式 3、间接调用模式 call()和 apply()方法可以用来间接地调用函数。 任何函数可以作为任何对象的方法来调用,哪怕这个函数不是那个对象的方法。 两个方法都可以指定调用的实参。 call()方法使用它自有的实参列表作为函数的实参,apply()方法则要求以数组的形式传入参数 匿名函数立即调用 (1)匿名函数:function ([参数]){} (2)调用:(function ([形参]) {})([实参]); 在函数只被使用一次的情况下可以使用这种方式,简便省事 return 语句 作用:在没有返回值的方法中,用来结束方法。 有返回值的方法中,一个是用来结束方法,一个是将值带给调用者。
函数的作用域
1、全局变量与局部变量同名问题(就近原则)
2、如果没使用var修饰符声明的变量是全局变量
3、函数中变量名的提升
3.对象
对象的创建
JS 创建自定义对象,主要通过三种方式:
字面量形式创建对象、
通过 new Object 对象创建 、
通过 Object 对象的 create 方法创建对象
字面量形式创建
var 对象名 = {};//创建一个空的对象
var 对象名 = {键:值,键 2:值 2,...}
通过 new Object 对象创建
var 对象名 = new Object();
通过 Object 对象的 create 方法创建对象
var 对象名 = Object.create(null); // 创建空模板的对象
var 对象名 = Object.create(对象); // 以指定对象为模板创建对象
序列化和反序列化
序列化对象,将对象转为字符串
JSON.stringify(object)
反序列化,将一个 Json 字符串转换为对象。
JSON.parse(jsonStr)
4.eval()
可借助 eval()动态函数,将参数字符串解析成 js 代码来执行,只接受原始字符串作为参数
可将 json 串转为 json 对象
1)第一种解析方式:得到的 json 对象名就是 jsonObj
eval(“var jsonObj = " + jsonStr);
2)第二种解析方式:对象中有多个属性
var jsonObj = eval(”(" + jsonStr + “)”);
由于 json 是以{ }的方式来开始以及结束的,在 eval 中会被当成一个语句块来处理,故必须强制将它转换成一种表达式。
加上圆括号是使 eval 函数在处理时强制将括号内的表达式转化为对象而不作为语句来执行。
3)第二种解析方式:对象中只有一个属性