5_js数组常用函数与let与const关键字

发布时间:2023年12月23日

  • 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 声明的变量作用域是全局或者整个函数块的。 varlet 的另一个重要区别,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的结果进行返回。

文章来源:https://blog.csdn.net/2301_80008556/article/details/135176132
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。