1.数组
数组:(Array)是一种可以按顺序保存数据的数据类型
声明语法:
let 数组名 = [数据1,数据2,....,数据n]
let arr = new Array(数据1,数据2,....,数据n)
数组是按顺序保存的,所以每个数据都有自己的编号
在数组中,数据的编号也叫索引或下标
数组可以存储任意类型的数据
取值语法:
数组名[下标]
1.1遍历数组
1.2 操作数组
数组的本质就是数据的结合,操作数据无非就是增 删 改 查 语法
1.2.1 新增
数组.push()方法将一个或多个元素添加到数组的末尾,并返回该数组的新长度。
语法:
arr.unshift(新增的内容)方法将一个或多个元素添加到数组的开头,并返回该数组的新长度。
语法:
1.2.2 删除
数组.pop()方法从数组中删除最后一个元素,并返回该元素的值。
语法:
arr.pop()
数组.shift()方法从数组中删除第一个元素,并返回该元素的值。
arr.shift()
数组.splice()方法从数组中删除指定元素。
arr.splice()
start起始位置:
指定修改的开始位置(从0计数)
deleteCoint:
表示要移除的数组元素打个数
可选的,如果省略则默认从指定的起始位置删除到最后。
2.函数
函数:function,是被设计为执行特定任务的代码块
函数可以把具有相同或者相似逻辑的代码“包裹起来”,通过函数调用执行这些被“包裹”的代码逻辑,这么做的优势是有利于精简代码方便复用
2.1函数使用
函数的声明语法
function say(){
dacument.write('hello')
}
函数命名规范
- 和变量命名基本一致
- 尽量小驼峰命名法
- 前缀应该为动词
函数的调用语法
注意:声明(定义)的函数必须调用才会真正被执行,使用()调用函数
2.2函数传参
参数列表:
- 传入数据列表
- 声明这个函数需要传入几个数据
- 多个数据用逗号隔开
例子:
function getSum(num1,num2){
document.write(num1 + num2)
}
function getSquare(num1){
document.write(num1*num1)
}
调用语法:
调用函数时,需要传入几个数据就写几个,用逗号隔开
getSum(1,2)
getSquare(1)
形参:声明函数时写在函数名右边小括号里的叫形参(形式上的参数)
实参:调用函数时写在函数名右边小括号里的叫实参(实际上的参数)
形参可以理解为是在这个函数内声明的变量(比如num = 10)
实参可以理解为是给这个变量赋值
开发时尽量保持形参和实参个数一致
补充:参数默认值
如果一个变量不给值,默认为undefined
如果不输入实参,上述案例则出现undefined + undefined ,结果为NaN
💡可以给形参默认值,可以默认为0,这样程序更加严谨
2.3函数返回值
之前遇到过的很多函数都具有返回值
只是这些函数是JS底层内置的,我们直接就可以使用
💡注意:有些函数没有返回值
alert('我是弹窗,不需要返回值')
要根据要求来设定需不需要返回值
✨当函数需要返回数据出去时,用return关键词
语法:
细节:
- 在函数体中使用return关键字能将内部的执行结果交给函数外部使用
- return后面的代码不再被执行,会立即结束当前函数,所以return后面的数据不要换行写
- return函数可以没有return,这种情况函数默认返回值为undefined
💡:返回值返回的是数组
return [a,b] //可返回多个值
函数细节补充:
- 两个相同的函数后面的会覆盖前面的函数
- 在js中,实参的个数和形参的个数可以不一致
如果形参过多会自动填上undefined
如果实参过多那么多余的实参会被忽略(函数内部有一个arguments,里面装着所有的实参)
- 函数一旦碰到return就不会在往下运行了,函数的结束就用return
2.4函数作用域
通常来说,一段代码中所用到的名字并不总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域
作用域的使用提高了程序逻辑的局限性,增强了程序的可靠性,减少了名字冲突。
变量的访问原则:
只要是代码,就至少有一个作用域
写在函数内部的局部作用域
如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域
访问原则:在能够访问到的情况下,先局部,局部没有再找全局,即采用就近原则的方式
2.5匿名函数
匿名函数:没有名字的函数,无法直接使用。
使用方式:
- 函数表达式
- 立即执行函数
2.5.1函数表达式
将匿名函数赋值给一个变量,并且通过变量名称进行调用,我们将这个称为函数表达式
语法:
调用:
💡注:其中函数的形参和实参使用跟具名函数一致
2.5.2立即执行函数
避免全局变量之间的污染
语法:
(function(){
console.log(1)
})();
(function(){
console.log(1)
}());
//不用调用,立即执行
多个立即执行函数要用;隔开,要不然会报错
补充:逻辑中断
开发中还会见到以下的写法:
其实类似参数的默认值写法
1.逻辑运算符里的短路
短路:只存在于&&和||中,当满足一定条件会让右边代码不执行
原因:通过左边就能得到整个式子的结果,因此没有必要再判断右边
运算结果:无论&&还是||,运算结果都是最后被执行的表达式值,一般用在变量赋值
2.转换为Boolean型
显示转换:
1.Boolean(内容)
记忆:“、0、undefined、null、false、NaN转换为布尔值后都是false,其余为true”
隐式转换:
- 有字符串的加法“ ”+ 1 ,结果是“1”
- 减法 - (像大多数数学运算一样)只能用于 数学,它会使空字符串“”转换为0
- null经过数字转换之后会变为0
- undefined经过数字转换之后会变为NaN
1.对象
对象(object):JavaScript里的一种数据类型
可以理解为是一种无序的数据集合,注意数组是有序的数据集合
用来描述某个事物,例如描述一个人
人有姓名、年龄、性别等信息
如果用多个变量保存则比较散,用对象比较统一
描述一个人的信息:
- 静态特征(性别、年龄、爱好等)=>可使用数字、字符串、数组、布尔类型等表示
- 动态行为(点名、唱、跳)=>使用函数表示
let obj ={
name:'soda'
age:19,
gender:'女'
}
1.1对象使用
1.1.1对象声明语法
实际开发中,我们多用花括号。{}是对象字面量
1.1.2对象有属性和方法组成
- 属性;信息或叫特征(名词)
- 方法:功能或叫行为(动词)
1.1.3属性
数据描述性的信息称为属性,如人的姓名、身高、年龄、性别等,一般是名词性的
属性都是成对出现的,包括属性名和值,他们之间使用英文:分隔
多个属性之间使用英文,分隔
属性就是依附在对象上的变量(外面是变量,对象内是属性)
属性名可以使用“”或,一般情况下省略,除非名称遇到特殊符号如空格、中横线等
对象本质是无序的数据集合,操作数据无非就是增 删 改 查 语法
1.查
- 声明对象,并添加了若干属性后,可以使用 . 获得对象中属性对应的值,称为属性访问
- 语法:对象名.属性
- 简单理解就是获取对象里面的属性值
补充:查的另一种写法:
- 对于多词属性或则 - 等属性,点操作就不能用了
- 可采取:对象['属性']方式,单引号和双引号都可以
console.log(obj.name)
console.log(obj['name'])
2.改
语法:对象名.属性 = 新值
3.增
语法:对象名.新属性 = 新值
4.删
语法:delete 对象名.属性
1.1.4对象中的方法
数据的行为性的信息称为方法,其本质是函数
- 方法是由方法名和函数两部分构成,他们之间使用:分隔
- 多个属性之间使用英文 , 分隔
- 方法是依附在对象中的函数
- 方法名可以使用“”或 ' ',一般情况下省略,除非名称遇到特殊符号如空格、中横线等
1.1.5对象中的方法
- 声明对象,并添加了若干方法后,可以使用 . 调用对象中的函数,称之为方法调用
- 也可以添加形参和实参
💡注:别忘了给方法名后加小括号
1.2遍历对象
- 一般不用这种方式遍历数组、主要是用来遍历对象
- for in 语法中的K是一个变量,在循环的过程中依次代表对象的属性名
- 由于k是变量,所以必须使用[]语法解析
- 一定记住:k是获得对象的属性名,对象名[k]是获得属性值
1.3内置对象
Math:
Math对象是js提供的一个“数学”对象(提供了一系列做数学运算的方法)
Math包含的方法有
生成任意范围随机数:
Math.random() 随机数函数,返回一个0~1之间,并且包括0不包括1的随机小数 [0,1)