数组、函数、对象
1、数组
-
定义数组
语法: var 自定义数组名称 = [];
-
给数组赋值
✔直接在定义数组的时候,就可以赋值了,值与值之间使用逗号隔开。 例如: var ary = [1,2,3,4,'abc',true,'汉字']; ✔通过索引(编号)的方式给数组赋值: 索引: 数组中每一个值对应的编号,编号是从 0 开始的 索引赋值语法: 自定义数组名称[索引值] = 值; 例如: ary[0] = 'a'; ary[1] = 'b'; ary[2] = 123;
-
获取数组中的值: 通过数组索引的方式获取数组中的值(索引是从0开始的)
数组名称[索引值]
-
获取数组的长度: 数组名.length
-
数组遍历: 通过循环的方式获取数组中的值。
-
冒泡排序:
✔ 对数据进行从小到大排列(升序)
✔ 对数据进行从大到小排列(降序)
-
字面量方式
var 数组名称 = [];
var ary = [1,2,3];
var max = ary[0];
for(var i = 0; i < ary.length; i++) {
if(max < ary[i]) {
max = ary[i]
}
}ary[0] = 123;
ary[0;]
for (var i = 0; i < ary.length; i++) { console.log(ary[i]) } Math.random() 随机数[0,1) Math.floor(Math.random()*(n-m+1) + m); Math.ceil()
☞ 其他部分
1. 获取当前系统时间
步骤:
1. var time = new Date();
2. 获取年月日,时分秒
getFullYear() | getMonth() | getDate() | getHours() | getMinutes() | getSeconds()
注意:
获取月份的时候是从0开始的。
2. 获取随机数: 随机产生的数字
步骤: 通过 Math.random(); 产生一个随机数 范围[0,1)
3. 将数字转化为整数
✔地板函数: Math.floor(变量) 返回一个小于当前数字的一个整数,且与其最接近的一个整数。
✔天花板函数: Math.ceil(变量) 返回一个大于当前数字的一个整数,且与其最接近的一个整数。
4. 字符串操作。
字符串.split('分割符') ===> 是一个数组
2.函数
语法:
bfunction 自定义函数名() {
写上对应的代码
}
注意:
1. 函数的命名规范: 要使用小驼峰命名法,要动词开始
2. 函数体中的代码,默认不会执行,调用函数才可以执行里面的代码。
☞如何调用函数? ====> 执行函数
函数名();
☞ 函数中的参数:
✔ 形参:是一种形式的参数,其实就是一个变量【在函数名后面写的参数就是形参】
✔ 实参:是一个具体值【在调用函数时候后面写的参数】
✔ 实参和形参之间的关系:
形参值的 来自于 实参的赋值结果(形参和实参是一一对应的)
形参 = 实参
✔ 如果一个函数没有参数,那么该函数就是无参函数
☞ 作用域:
✔ 局部作用域:在函数内部的区域,局部作用域,在局部作用域中定义的变量,局部变量。
注意:
1. 局部作用域中的变量(局部变量)只能在局部作用域中使用,不能在全局作用域中使用。
✔ 全局作用域:在函数外部的区域,全局作用域。在全局作用域中定义的变量,全局变量。
注意:
1. 全局变量可以在任何地方被使用。
☞ 返回值: 如果希望在全局作用域中得到局部变量的值,那么就可以使用返回值。
语法:
return 变量(具体的值);
总结:
1. 一个函数中只能写一个返回值
2. 在程序中,当前代码执行到return关键字的时候,后面的代码不再执行。
3. 数组也可以作为返回值
4. 如果一个函数中没有写return,那么该函数也是有返回值的,返回值是 undefined。
5. 如果一个函数return后面没有写任何值,那么最后返回结果是 undefined。
☞ 函数其他部分:
✔ 函数的另外一种定义方式
var 变量 = function() {} (字面量方式创建函数)
✔ 函数的分类
1. 命名函数: 有函数名称
2. 匿名函数:没有函数名
✔ 函数的调用方式:
1. 通过函数名称+()方式调用函数
2. 函数可以自己调用自己(自调用函数)。
例如:
(function fn(a) {
alert(a);
})(1)
或者
(function(a) {
alert(a);
})(1)
✔ 作用域链(理论知识):作用域和作用域之间形成的一个链条状
✔ arguments使用:保存的就是用户传递的实参信息(个数,具体的值)
☞ 通过arguments.length ---> 获取到实参的个数
☞ arguments 保存的值,都是以数组的形式保存的,如果希望获取具体的值,那么只要遍历arguments即可。
☞ 当函数中无法确定形参个数的时候,那么可以通过arguments来获取实参信息
☞ 如果函数能够确定形参个数的时候,还是建议使用形参
☞ 代码预解析:
1. 变量提升 :当程序中遇到定义变量后,就会将该变量的定义提升到当前作用域的开始位置,不包括变量的赋值
2. 函数提升:当程序中遇到函数的声明时,那么会将函数的声明提升到当前作用域的开始位置,不包括函数的调用
3.对象
对象: 指的是一个具体的事物(人,物品),在程序中对象其实就是对现实生活中具体事物的一个抽象描述。
对象本质: 在程序中保存数据的【容器】
语法:
1. 通过字面量方式创建一个对象(容器)
var 自定义名称 = {
自定义键 : 值,
自定义键 :值
}
2. 通过构造函数创建对象(字面量方式是该种方式的一种简写行式)
语法:
var 自定义对象名 = new Object();
分析构造函数创建对象
1. 构造函数: 本质还一个函数,只不过该函数是用来创建对象的【构造函数的命名是按照帕斯卡命名法】
2. Object()就是js中内置的一个用来创建对象的一个构造函数
3. 关键字new : 用来调用构造函数实现实例化一个对象(创建一个对象)
4. 执行过程:
✔ 先执行 new Object() 在内存中开辟一块空间(产生一个内存地址)
✔ 将内存地址 赋值给左侧的变量
✔ 变量就会按照内存地址去实现对象中的代码
3. 通过工厂方式创建对象:将构造函数创建的对象封装到一个函数中
例如:
function createPeople (uName, uAge, uScore) {
var obj = new Object();
obj.userName = uName;
obj.age = uAge;
obj.score = uScore;
return obj;
}
var zs = createPeople('zs', 18, 100);
var ls = createPeople('ls', 22, 90);
console.log(zs);
console.log(ls);
4. 通过自定义构造函数创建对象
☞ 自定义构造函数本质: 还是一个函数(1. 是咱们自己写的一个函数。 2. 创建对象)
☞ 在使用自定义构造函数创建对象的时候,也需要使用关键字 new
备注:
1. 普通的函数遵守驼峰命名法
2. 构造函数遵守帕斯卡命名法
例如:
// 通过自定义构造函数创建对象
function People(name, age, gender) {
this.userName = name;
this.userAage = age;
this.userGender = gender;
this.run = function() {
alert(this.userName +'正在跑步运动中...');
}
}
// 使用该自定义构造函数创建对象
var zs = new People('张三', 18, '男');
var ls = new People('李四', 22, '女');
console.log(zs, ls);
自定义构造函数总结:
1. 在构造函数中返回值可以省略不写
2. 构造函数中的this关键字,谁调用该构造函数,this就指向谁。
3. 如果批量创建对象,那么推荐使用自定义构造函数
4. 如果程序中只是简单的创建个别几个对象,那么可以使用字面量直接创建
获取对象中的值:
✔ 对象名.键的名字
✔ 对象名['键的名字']
备注:
1. 如果要获取属性的值,那么直接 对象.属性名
2. 如果要获取方法的值,那么直接 对象.方法名()
给对象赋值:
✔ 直接在定义对象的时候,以键值对的方式给对象赋值
✔ 通过 对象名.自定义键名 = 值;
✔ 通过 对象名['自定义键名'] = 值;
注意:
1. 对象中保存数据格式是以键值对格式保存的 : 键:值
2. 在对象中用来描述对象基本特征的: 叫属性(名词)
在对象中用来描述对象的行为: 叫方法(是一个函数)
☞ 遍历对象: 通过循环的方式找到对象中的每一个值。
☞ 语法:
for( 键 in 对象 ) {
对象[键]
}
例如:
var obj = {
username : '张三',
userage : 20,
usergender : '男'
}
for( key in obj ) {
console.log(key + ':'+ obj[key]);
}
对象总结:
1. 能够使用四种方式创建对象
2. 能够给创建的对象赋值
对象.键 = 值;
对象['键'] = 值;
3. 获取对象中的值
对象.键;
对象['键'];
4. 遍历对象
for( key in 对象) {
对象[key]
}
5. new : 通过调用构造函数创建对象(实例化)
6. this : 谁调用构造函数,this就指向谁。
7.
对象中的属性: 对象中的属性就是用来描述对象基本特征(名词)
对象中的匿名函数 : 对象中的方法
8. typeof ====> 获取当前变量的数据类型
instanceOf ====》 判断当前对象是通过哪个构造函数创建的
其他扩展部分:
1. 简单数据类型: 在栈上存储
简单数据类型在栈保存的就是一个具体值
2. 复杂数据类型: 在堆上存储
✔ 首先在对上开辟一块空间 ---- 生成内存地址
✔ 将内存地址保存到栈上
3. 内置对象:js原生的对象。通过查MDN手册,去使用提供的属性及方法。
https://developer.mozilla.org/zh-CN/
var ary = new Array();
var ary = [];
☞ 与数学运算相关的内置对象 Math
Math.PI ----》 用来获取圆周率
Math.round(值) ----> 对一个数字进行四舍五入 (得到的是一个整数)
Math.abs(值) ----> 获取一个数字的绝对值
Math.max(值,值) -----> 获取一组数字中的最大值
Math.min(值,值) -----> 获取一组数字中的最小值
Math.pow(x,y) -----》 获取 x 的 y 次 方
☞ 与数组对象相关的方法或属性
1. 通过构造函数创建对象
var ary = new Array();
2. 通过字面量方式创建对象
var ary = [];
3. 获取数组的长度 ary.length
4. 方法:
Array.isArray(ary) 判断一个变量是不是数组,返回 true 或者 false
数组对象名.push(值); 给数组赋值,把值赋值给数组的末尾
数组对象名.unshift(值); 给数组赋值,把值赋值给数组的开始
数组对象名.pop() // 获取数组中最后一个数字,并返回该数字
数组对象名.shift() // 从数组中第一个值开始获取,返回该数字
数组对象名.reverse() // 将数组翻转
数组对象名.join方法('|') // 返回的是一个字符串
indexOf(字符) // 用来获取数组中对应字符的索引位置,如果包含该字符那么就返回其对应的索引位置,如果不包含该字符,那么就返回 -1;
5. 字符串方法
☞ 字符串特性: 不可变性。
☞ 属性
字符串变量.length ====》 获取字符串长度
☞ 方法:
indexOf(字符) ===》 或字符在字符串的索引位置(如果有直接返回索引位置),如果没有返回-1
lastIndexOf(字符)
replace(a,b) // 用b替换a
1. concat() //拼接字符串 等效于 +
2. slice(strat,end) //从指定位置开始,截取字符串到结束位置,end值取不到
3. substring(start,end) //从指定位置开始,截取字符串到结束位置, end值取不到
4. substr(start,length) //从哪个位置开始,一共要截取多少个