-
var
语句 用于声明一个函数范围或全局范围的变量。
1.1 const修饰
-
const:常量的值是无法改变的,也不能被重新声明。
-
PI:3.1415926....
-
因为变量你修改值,就是等于把引用地址也修改了。
-
//申明不可变的值
const number = 42;
number = 99;
console.log(number); //TypeError: Assignment to constant variable.
不能复制给const修饰的变量
-
课堂案例:1.const修饰变量(不可变的值).html
-
const也可以修饰对象和数组
const MY_OBJECT = {'key': 'value'};
// 重写对象和上面一样会失败
// Uncaught TypeError: Assignment to constant variable.
MY_OBJECT = {'OTHER_KEY': 'value'};
// 对象属性并不在保护的范围内
// 下面这个声明会成功执行
MY_OBJECT.key = 'otherValue'; // Use Object.freeze() to make object immutable
// 也可以用来定义数组
const MY_ARRAY = [];
// 可以向数组填充数据
MY_ARRAY.push('A'); // ["A"]
// 但是,将一个新数组赋给变量会引发错误
// Uncaught TypeError: Assignment to constant variable.
MY_ARRAY = ['B'];
-
课堂案例:2.const修饰对象.html
-
课堂案例:3.const修饰数组.html
1.2 let修饰
-
let
语句声明一个块级作用域的局部变量。 -
let
允许你声明一个作用域被限制在块作用域中的变量、语句或者表达式。与 var 关键字不同的是,var
声明的变量作用域是全局或者整个函数块的。var
和let
的另一个重要区别,let
声明的变量不会在作用域中被提升,它是在编译时才初始化。
var x1 = 1;
if (x1 === 1) {
var x1 = 2;
console.log(x1);
// expected output: 2
}
//引用了全局的
console.log(x1);
// expected output: 1
let x2 = 1;
if (x2 === 1) {
let x2 = 2;
console.log(x2);
// expected output: 2
}
//作用域划分非常明显
console.log(x2);
// expected output: 1
-
课堂案例:4.let申明变量.html
-
作用域规则
-
let
声明的变量作用域只在其声明的块或子块内部,这一点,与var
相似。二者之间最主要的区别在于var
声明的变量的作用域是整个封闭函数。
-
function varTest() {
var x = 1;
{
var x = 2; // same variable!
console.log(x); // 2
}
console.log(x); // 2
}
function letTest() {
let x = 1;
{
let x = 2; // different variable
console.log(x); // 2
}
console.log(x); // 1
}
-
课堂案例:5.let作用域规则.html
-
重复声明
-
在同一个函数或块作用域中重复声明同一个变量会抛出
SyntaxError
-
//错误情况1
if (x) {
let foo;
let foo; // SyntaxError thrown.
}
//错误情况2
let x = 1;
switch(x) {
case 0:
let foo;
break;
case 1:
let foo; // SyntaxError for redeclaration.
break;
}
//正确情况:然而,需要特别指出的是,一个嵌套在 case 子句中的块会创建一个
//新的块作用域的词法环境,就不会产生上诉重复声明的错误。
let x = 1;
switch(x) {
case 0: {
let foo;
break;
}
case 1: {
let foo;
break;
}
}
-
其它情况:
-
用在块级作用域中,
let
将变量的作用域限制在块内,而var
声明的变量的作用域是在函数内。
-
var a = 1;
var b = 2;
if (a === 1) {
var a = 11; // the scope is global
let b = 22; // the scope is inside the if-block
console.log(a); // 11
console.log(b); // 22
}
console.log(a); // 11
console.log(b); // 2
-
课堂案例:6.let的重复申明与其它情况.html
2 数组常用函数的应用
2.1 数组排序
-
课堂案例:7.数组反转和排序的函数.html
2.2 数组常用方法解析
-
课堂案例:8.数组常用方法1.html
-
at()
根据索引返回对应的值-
参数为负数:从后往前检索
-
匹配给定索引的数组中的元素。如果找不到指定的索引,则返回 undefined。
-
-
indexOf()
返回指定值(第一次出现)对应的索引-
参数为负数:也是从指定的位置开始往后找
-
如果不存在,则返回 -1
-
-
lastIndexOf()
返回元素最后一次出现的索引,从数组的后面向前查找(从右边向左边找)-
如果不存在则返回 -1
-
参数为正数的时候也是从右边向左边找。
-
-
-
课堂案例:9.数组常用方法2.html
-
values()
将数组转换为迭代器进行遍历,可以使用增强For循环。
-
-
课堂案例:10.数组常用方法3.html
-
concat()
用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。 -
copyWithin()
复制数组的一部分到同一数组中的另一个位置,并返回它,不会改变原数组的长度。-
console.log(array1.copyWithin(0, 3, 4)); 包含了索引3的值而不包含索引4的值,给替换到索引0的位置。
-
-
entries()
方法返回一个新的 Array Iterator 对象,该对象包含数组中每个索引的键/值对。
-
-
课堂案例:11.数组常用方法之every.html
-
课堂案例:12.数组常用方法之filter.html
-
every()
接受的参数是一个函数,它返回一个布尔值。-
array1.every(isThreshold) //将左边数组中的每个值,都调用isThreshold进行计算
-
-
filter()
过滤数组的元素,该方法的返回值是true和false,最终将为true的结果进行返回。