1.函数
函数在JS中数据Object引用类型
-
关键字形式函数
使用关键字function声明
语法:
function 函数名(参数1,参数2……){
代码块
} -
表达式形式函数(即匿名函数)
var dhs = function(){
语句块
}
区别:关键字形式函数可在声明之前调用(浏览器会提升),而匿名函数则不可 -
作用域(scope):函数内定义的变量为局部变量,仅在函数体中可访问;函数外定义的变量为全局变量,可在js行为层任意位置使用。
注意的是在循环语句中定义的变量,也为全局变量。
js中最大的作用域在标签之间。
<script>
var num = 42;
function fun(){
console.log(num);
if(false){
var num = 21;
}
}
fun()
</script>
上述代码输出结果为undefined,因为浏览器会把变量声明部分提升,复值部分则不会。
在JS中任何语句都阻挡不了变量声明部分的提升;
会提升到当前作用域最上方。
- 关键字return
return一般结合函数使用,且一般在函数体中使用
函数体中如果遇到关键字return,函数体中后面语句则不会再执行。
return可将计算完的结果返回。
回调函数
当一个函数执行的时候,传入的实参为另外一个函数声明部分,这个实参(函数)即为回调函数。
<script>
var num = 42;
function fun(a,b){
console.log(a);
b();
}
fun(11,function(){
console.log('执行力');
})
</script>
IIFE
全称:immediately invoking funciton express`
在表达式形式函数后紧随小括号立即调用,即IIFE;
关键字形式函数后不可直接跟小括号,但是可以通过一些手段实现立即调用。
<script>
+function test(){
console.log('hello')
}()
-function test(){
console.log('xiaoming')
}()
!function test(){
console.log('a')
}()
(function test(){
console.log('a')
})()
</script>
+,-,!,() 可将关键字函数转变为IIFE,立即调用。每一个IIFE都有属于自己的独立作用域。
2.数组
JS中,中括号[]代表数组,数组属于引用类型数据Object。
数组是有序的(即可以通过位置查找),可以存储很多任意类型数据。eg:[1,'aw',null,function(){}]
<script>
var arr = ['后',null,3];
console.log(arr[0])
</script>
通过访问下表可以访问数组。
数组枚举元素的时候,下表越界不会报错,默认返回undefined。
<script>
var arr = ['后',null,3];
console.log(arr[0]);
arr[0]='前'; //修改元素
console.log(arr[0]);
arr[3]=8; //添加元素
console.log(arr);
</script>
数组常用属性和方法
-
属性
length -
方法
push():向数组的尾部添加一个或多个元素
pop():在数组的尾部移除一个元素
unshift():向数组的头部添加一个或多个元素
shift():在数组的头部移除一个元素
join():可通过某一个字符将数组拼接转换为字符串
reverse():将当前数组倒置
indexOf():可以获取数组中某一个元素的索引值
includes():检查某一个元素受否存在与数组中,返回ture或false
slice():从其实数组中切割出一个新的子数组,可以有1或2个参数,分别是起始,结束索引值,左闭右开。该方法对起始数组没有影响
splice():可对数组进行切割,插入,替换。会修改起始数组
<script>
var arr = ['后','rf',3];
console.log(arr.join('-'));
var arr = ['吃饭','睡觉','doudou1'];
console.log(arr.join('-'));
console.log(arr.indexOf('睡觉'));
var arr = [1,2,3,4,5,6,6];
console.log(arr.slice('3'));
var arr = ['ag','wq','q','t','o'];
arr.splice(2); //从索引值为2的位置切割至末尾
arr.splice(2,3); //从索引值为2的位置切割3个元素
arr.splice(2,0,'ff'); //从索引值为2的位置插入元素,关键点为0
arr.splice(2,2,'ff'); //将索引值为2,3的元素替换掉
</script>
3.堆栈空间
我们书写的代码,存储在计算机内存当中,计算机内存中分:五大区域。
常用区域:堆空间,栈
基本数据类型存储于栈,引用数据类型存储与堆空间。
var a=100,b=100 //此时a存的是值100
console.log(a==b) //返回true
var a=[],b=[] //a存的是内存地址
console.log(a==b) //返回false
4.字符串属性和方法
属性:
length:获取字符串长度
方法:
toUppercase():将字符串中英文小写转为大写
toLowercase():将字符串中英文大写转为小写
search():正则,返回第一个匹配的下标(可结合正则),加修饰符g无用
split():正则,可将字符串通过某一个字符切割为一个数组,(最常用的是用空字符串进行切割)
substring():从父串中切割出一个子串,str.substring(起始索引值,结束索引值)。(参数至少一个,至多两)
substr():从父串中切割出一个子串,str.sub(起始索引值,所且字符串个数)
上述方法都会返回一个新字符串,对起始字符串无影响
replace():正则可以将某一个字符串中符合条件的字符进行替换
match():正则,可以进行将某一个字符串中符合条件的第一个字符匹配出来,返回的是一个数组。
5.JSON数据格式
【JavaScript Object Nation】
- JSON数据格式通过KV对来存储数据
- JSON数据格式K务必要加双引号
- data.k,data[k]读;,data.k=22,data[k]=3 为修改或新增
6.正则
正则表达式方法:
exec:在目标字符串中执行一次正则匹配操作,即是有修饰符g,也只匹配一次
test:用于检测正则表达式是否在当前字符中出现,返回布尔值true或者false
<script>
var str = '我很喜欢 中国 空气';
var re = /中国/g;
console.log(re.test(str))
</script>
7.三元运算符
语法 A?B:C
三元运算符A:需要是布尔值,或可隐式转为布尔
A为真则返回结果B,否则返回C
三元运算符B和C:可以为任意类型数值或表达式
应用场景:经常用于给变量赋值,eg: true ?16:NAN
8.进阶
类数组对象:arguments(不是数组,只能使用数组的length属性)
函数体中拥有一个引用类型数据arguments,在函数没有形参的情况下,可以获取外部传入的实参。
<script>
function fun(){
console.log(arguments)
}
fun(1,2,3,5)
</script>