作用域的特点
作用域的机制
作用域是针对变量的起作用的范围。
而变量又分为“使用变量”和“赋值变量”
使用变量
又叫做访问变量 出现在表达式中,赋值语句右侧。
访问变量规则: 当访问变量的时候,会先查看当前作用域中是否存在该变量,如果有,就使用。如果没有,就将会向上一层级作用域中寻找。依次向上,直到找到,或者到了全局作用域中还没有找到,就会报错。
赋值变量
也叫做修改变量 只出现在赋值语句左侧
赋值变量规则: 当对一个变量进行赋值的时候,会先查看当前作用域中是否存在该变量,如果有,就赋值。如果没有,就向上一层级查找。依次向上,直到找到,或者到了全局作用域中还没有找到,就会在全局作用域中悄悄的声明这个变量并赋值。
千万不要使用这个特点 切记,切忌。
数组
装载一组数据的容器
数组的定义
方式1 字面量
语法:
var arr = [];
方式2 构造函数
语法:
var arr = new Array();
传参规则:
当没有参数时, 定义的是一个空数组
当参数只有一个并且是数字时,该数字表示数组的长度
当参数有多个时,参数就是每一个成员
方式3 构造函数
语法:
var arr = Array();
传参规则: 同上
数组的使用
存储数据
数据是以一定的顺序存储在内部 每一个数据都有一个"序号" 这个序号叫做下标 或者 索引
语法:
数组[下标] = xxx
访问数据
语法:
数组[下标]
当该代码单独出现,就表示要使用数据。就会去读取对应的数据。如果数据存在,就得到,如果不存在就读取不到,返回undefined。
数组的length属性
数组是一组数据,length属性表示这个数组中的内容的个数。简称数组的长度。
该长度是可读可写的属性。
当设置属性的时候,表示要修改该数组的长度。数组的长度会发生变化。
当读取时,会实时返回数组的当时的长度。
对象的使用
对象: 是一组k:v对的集合。
每一组k:v对,叫做对象的属性。 k表示对象的属性名,v表示对象的属性值。
每一组k:v对,使用逗号隔开,推荐一行一个k:v对
k最好符合变量的命名规范。 v是具体的数据。可以是任何数据。
定义对象:
方式一: 字面量 (推荐方式) ;
var obj = {};
方式二: 构造函数
var obj = new Object();
var obj = Object();
对象的属性操作:
读取属性:
方式1 点语法 obj.name
方式2 方括号语法 obj[“name”]
设置属性:
方式1 点语法 obj.xxx = xxx;
方式2 方括号语法 obj[“xxx”] = xxx;
删除属性
delete关键字 该关键字只能用来删除对象的属性 而不可以用来删除变量
对象的循环遍历
语法: for (var i in obj) {
}
注:obj.i 这种方式,真的是在读取 obj的 i 属性 而不是读取i变量所保存的值属性
方括号语法与点语法的区别
方括号语法:
[] 之间是一个JS的执行环境,可以使用变量,表达式
[] 最终需要的是一个字符串,如果不是字符串,会转为字符串(调用toString方法)
[] 只要内容是字符串,不论是否符合变量命名规范,都可以成功
点语法:
点语法,点什么,就是什么
点语法,必须符合变量的命名规范
其它知识点
Math.pow(x, y); 该方法用于计算x的y次方
Math.max(); 该方法用于计算传递给max的所有参数中,最大的那个
Math.min(); 该方法用于计算传递给min的所有参数中,最小的那个
小提示: 数组的循环与arguments的循环方式一致
有一个数组 数组中都是数值 请从小到大排序
var arr = [10, 189, 999, 20, 14, 6, 88, 190, 54];
思路:
循环两两比较 如果第一个数比第二个数大 就换位置 否则不换
循环这么一次 已经将最大的数放到了最后
注: arr.length - 1 是因为一次循环要使用两个值 当前值 和下一个值 所以为了保证最后一次有两个值 所以要-1
循环一次能够确定一个最大的数
for (var j = 0; j < arr.length - 1; j++) {
for (var i = 0; i < arr.length - 1 - j; i++) {
console.log(“第” + i + “次循环”, arr[i], arr[i + 1]);
if (arr[i] < arr[i + 1]) {
// 换位置
var temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
}
console.log(arr);
- 定义一个含有30个整型元素的数组,按顺序分别赋予从2开始的偶数;
然后按顺序每五个数求出一个平均值,放在另一个数组中并输出。试编程。
var arr = [2, 4, 6, 8, …, 60]
结果是一个新的数组
[6, 16, 26, 36, 46, 56
1 得先定义长度为30的数组
var arr = new Array();
for (var i = 0; i < 30; i++) {
arr[i] = (i + 1) * 2;
}
var newArr = [];
// 定义总数
var count = 0;
循环
for (var i = 0; i < arr.length; i++) {
累加
count += arr[i];
判定 是否到第五个了
if ((i + 1) % 5 === 0) {
如果到了第五个 我们要计算平均值并放入新数组
newArr.push(count / 5);
到了第五个 下一个是新的一轮计算 要排除之前的干扰 数字要清零
count = 0;
}
}
console.log(newArr);