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

  • 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的结果进行返回。

  • 30
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值