一、数组
1.数组(Array)
定义:就是一组数据的集合,存储在单个变量下(数组里边的数据 成为数据元素)
(1)创建数组
- 利用new 创建数组
var arr = new Array(); //创建了一个 空数组
利用数组字面量创建数组 var arr1 = []; //创建了一个 空数组
-
注意点:
-
获取数组元素 数组名[索引号] 索引号从0开始
数组里边可以存放 任意类型的数据(字符串、数字、布尔值等) -
(2)遍历数组定义:就是把数组的元素从头到尾访问一次
注意点:
遍历是通过 for循环 进行的 (想把数组里边的值取出来 就通过遍历 for循环)
索引号 i 从0开始 ; i 的范围 不带等号
arr [ i ]是 数组元素第 i 个 ; i 是计数器(当索引号使用) -
2.冒泡排序 ★
定义:一次比较两个元素,如果它们的顺序错误就把它们交换过来(从大到小or从小到大的顺序)
var arr = [4, 1, 2, 3, 5]; //从大到小排序 for (var i = 0; i <= arr.length - 1; i++) { //外层循环 管轮数 for (var j = 0; j <= arr.length - i - 1; j++) { //内层循环 管每一轮的交换次数 // 内部交换2个变量 前一个和后一个数组元素相比较 if (arr[j] < arr[j + 1]) { var temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } console.log(arr); // 由于每一轮循环都会确定一个当前轮数下的最大元素,因此在下一轮循环中可以减少遍历的元素个数 // arr.length - i - 1 表示未排序部分的长度 // -i目的:忽略已经排好的末尾部分,减少内层循环的遍历次数 (i是轮数 )
二、函数
1.函数
定义:函数就是封装了一段可以被重复调用执行的代码块 目的:实现大量代码的重复使用
命名:函数命名一般用 动词 get Sum 等,变量命名一般用 名词 sum等
算法:观察变化 找出规律 转换为代码
函数的封装:把一个或者多个功能通过函数的方式封装起来,对外只提供一个简单的函数接口
简单理解:封装 就是将电脑配件整合组装到机箱中 (类似快递打包)
函数的使用:
声明函数 和 调用函数
声明函数 有两种方式 1.利用函数关键字 自命名函数 2. 使用函数表达式 声明函数 (匿名函数)
函数不调用 自己不执行
// 函数的使用:声明函数 和 调用函数
// 1.声明函数 两种方式:(1)利用函数关键字自命名函数 (2) 使用函数表达式声明函数 (匿名函数)
function 函数名(){
函数体
}
function sayHi() {
console.log('hi~~');
}
// 2.调用函数 函数名();
sayHi();
// (2) 函数表达式(匿名函数)★
// var 变量名 = function(){
// 函数体
// }
var fun = function (aru) {
console.log('我是函数表达式');
console.log(aru);
}
fun('我传递参数给aru');
2.形参 和 实参
形参:声明函数时 小括号里边的为形参(形式上的参数)
实参:函数调用时,小括号里边的是实参(实际的参数)
注意点:
形参是用来接收实参的
形参可以看做是不用声明的变量
尽量让实参和形参 个数相匹配
函数可以带参数 也可以不带参数 (带参数的话,参数个数不限)
在js中,形参默认值是:undefined
参数作用:函数内部某些值不固定,我们可以通过参数在调用函数时传递不同的值进去
// function 函数名(形参1,形参2...){
// }
// 函数名(实参1,实参2...)
// 形参和实参 的执行过程 arguments 参数
function cook(aru) { // 类似于赋值操作 aru = '辣子鸡'
console.log(aru);
}
cook('红烧排骨');
cook('辣子鸡');
3.函数返回值 return
函数只是实现某种功能,最终的结果是需要返回给函数的调用者--函数名() ,这就需要通过return实现
只要函数遇到return,就把return后边的结果 返回给了函数的调用者 相当于进行了一次赋值操作,函数名( ) = return后面结果
return 只能返回一个值 如果用逗号隔开多个值 以最后一个为准
// 代码比较:
// 1. 把实参传给 形参 然后打印出来
function cook1(aru) {
console.log(aru);
}
cook1('卤猪蹄')
// 2. 把实参传给 形参 再把return后面的值 返回给调用者cook(); 然后打印出来
function cook(aru) {
return aru;
}
console.log(cook('大肘子'));
4.区别:continue、break、return
- continue:退出本次循环,继续执行剩余次数的循环
- break:退出整个循环
- return:退出循环,返回return语句中的值,结束当前的函数体里边的代码
5.arguments的使用:
当我们不确定有多少个参数的时候,可以用arguments来获取
每个函数都内置的有arguments对象
arguments中 存储了传递的所有实参
arguments的展示形式 是一个 伪数组,因此可以进行遍历
伪数组特点:
具有数组的 length 属性
按照 索引 的方式进行存储
它没有真正数组的一些方法 pop() 、push() 等方法
6.作用域
作用域:就是代码名字(变量) 在某个范围内 起作用和效果 目的:提高程序可靠性 减少命名冲突
全局作用域:整个script标签 或者是 一个单独的js文件 内起作用
局部作用域:又叫做函数作用域,在函数内部的就是局部作用域 这个代码的名字只在函数内部起效果和作用
变量的作用域
全局变量:在全局作用域下的变量 全局下都可以使用
如果在函数内部 没有声明直接赋值的变量也属于 全局变量 ★
局部变量:在局部作用域下的变量 或者 在函数内部的变量就是 局部变量
函数的形参也可以看做是局部变量
7.关于块级作用域 {}
现阶段我们的js中 没有块级作用域
js没有块级作用域 我们在花括号写的变量 也可以被外部调用 ★
不要和局部作用域(函数作用域) 弄混淆了
// 块级作用域 {}
// 在java中
// if (xx) {
// int num = 10;
// }
// 外面 是不能调用num的
//注意:
// js没有块级作用域 我们在花括号写的变量 也可以被外部调用 ★
// 不要和局部作用域 弄混淆了 ★
if (3 < 5) {
var num = 10;
}
console.log(num); // 10
8.作用域链
作用域链:内部函数访问外部函数的变量 采取的 链式查找的方式 目的:用于决定取哪个值
- 采用 就近原则 ★
- 站在目标出发,一层一层向外查找
-
三、对象 -
1.对象
-
定义:在js中,对象是一组无序的相关属性和方法的集合,所有的事物都是对象,例如字符串、数值、数组、函数等通俗理解: 对象是一个具体的事物,看的见摸得着的实体
组成:对象是由 属性 和 方法 组成的
属性:事物的特征,在对象中用属性来表示(常用名词)
方法:事物的行为,在对象中用方法来表示是(常用动词)
方法冒号后面跟的是一个匿名函数
方法的另一种解释:写在对象里面的函数 就叫做 方法 -
2.对象的创建方式 -
(1) 利用对象字面量 创建对象 { }采取 键值对 的形式 匹配属性 属性名(键) :属性值(值)
多个属性或者方法中间用 逗号 隔开
方法冒号后面跟的是一个匿名函数 ★
调用的时候:对象名.属性名 对象名.方法名()
// var obj = {}; // 创建了一个空的对象 var obj = { uname: '白小雪', age: 18, sex: '男', sayHi: function () { console.log('hi~'); } } console.log(obj.uname); // 对象名.属性名 console.log(obj['age']); // 对象名['属性名'] obj.sayHi(); // 对象名.方法名()
3)利用构造函数 创建对象 ★
构造函数名字 首字母要大写
构造函数 不需要 return 就可以返回结果
多个属性和方法之间用 分号 结束
调用构造函数 必须用 new ★
我们只要new Star()一下 调用函数就创建一个对象 ldh{}
属性 和 方法 前面必须添加 this ★ (this 当前这个)// 构造函数 语法格式: function 构造函数名(){ this.属性 = 值; this.方法 = function(){ } } new 构造函数名(); // 调用构造函数 必须用 new ★ // 举例 function Star(uname, age, sex) { this.name = uname; this.age = age; this.sex = sex; this.sing = function (sang) { console.log(sang); } } var ldh = new Star('刘德华', 18, '男'); // 调用函数 返回的是一个对象 // console.log(typeof ldh); // object console.log(ldh.name); console.log(ldh['sex']); ldh.sing('冰雨'); // // 调用对象的方法 对象名.方法名()★ var zxy = new Star('张学友', 21, '男'); console.log(zxy.name); console.log(zxy.age);
4.new 关键字执行过程
-
new 构造函数 可以在内存中创建一个 空对象
this 会指向刚刚创建的对象
执行构造函数里面的代码 给这个空对象添加属性和方法 ★
返回这个对象 -
5.遍历对象 for in -
遍历对象:利用 for in 遍历对象 (for in 里边的变量 我们习惯写成 k 或者 key)
作用:for in 语句 用于对数组或者对象的属性进行循环操作
// 语法: for(变量 in 对象){ } // 举例 var obj = { name: 'pink老师', age: 18, sex: '男' } for (var k in obj) { console.log(k); // k 变量 输出 得到的是 属性名 console.log(obj[k]); // obj[k] 得到的是 属性值 }
6. 内置对象
定义:js自带的一些对象,供开发者使用,提供了一些常用的功能(属性和方法)
优点:帮助我们快速开发
js常用内置对象:Math、Date、Array、String等