一、数组
1.数组的创建
1)利用字面量创建数组
var 数组名 = [];
js中一个数组中可以同时存在多种数据类型。
数组长度:a.length
2)利用array创建数组
3)检测是否是数组
2.数组转化为字符串
3.数组增加元素
1)push()
push()有个返回值-----》新数组的长度
2)unshift()
unshift()有个返回值-----》新数组的长度
4.删除数组元素
1)pop()
删除数组最后一个元素------》数组.pop();
返回值是所删除的元素
2)shift()
删除数组第一个元素------》数组.shift();
返回值是所删除的元素
5.翻转数组以及对数组排序
6.数组索引号
7.数组去重
核心原理:拿着旧数组的元素去新数组中查询,(根据indexOf方法进行查询)
8.数组转化为字符串
9.字符串转化为数组
二、函数
1.arguments的使用
2.函数的声明方式
1).利用函数关键字自定义函数(命名函数)
function fn(){} fn();
2).利用函数表达式(匿名函数)
var fun = function() {}
fun();
三、js作用域
1.js的作用域(es6以前)
全局作用域:整个script标签中或者单独的js文件
全局变量-----》特殊(函数中直接赋值的元素当成全局变量看)
局部作用域(函数作用域):函数内部起作用
局部变量;函数的形参也可以看做局部变量
es6新增了块级作用域
2.js作用域链(就近原则)
3.作用域中调用函数
外部调用函数时,只能一层一层调用,爷爷辈不能调用孙子辈的函数(暂时没感觉有什么错,以后学到了再更改)
4.js预解析(面试重点)
(1)js引擎运行js分为两个步骤,1.预解析,2.代码执行;
1)预解析:js引擎会把js里面所有的var以及function提升到当前作用域的最前面
2)代码执行:按照预解析之后的代码顺序进行执行
(2)预解析分为变量预解析(变量提升)和函数预解析(函数提升)
1)变量提升:把所有的变量声明提升到当前的作用域的最前面,不提升赋值操作
2)函数提升:把所有的函数声明提升到当前作用域的最前面 不调整函数
匿名函数var fun = function(){}相当于对变量fun进行赋值操作,只是赋的值是一个函数而已。所以提升规则相当于变量提升。
函数内部直接赋值的变量:-----》是一个全局变量
var a = b = c = 9;相当于
var a;
a = b = c = 9;
其中a为函数f1中的局部变量,b,c为全局变量