关于声明变量和数组方法

声明变量

首先是作用域,作用域指的是您有权访问的变量集合。传统js只有两个作用域,1是全局,2是局部(函数内)在 JavaScript 函数中声明的变量,会成为函数的局部变量。局部变量的作用域是局部的:只能在函数内部访问它们。函数之外声明的变量,会成为全局变量。全局变量的作用域是全局的:网页的所有脚本和函数都能够访问它。

关于var let const三者:
var 可以重复声明,存在变量提升,只有两个作用域,全局和局部(函数内),会将声明的变量挂载到window对象上,会引发一系列不可思议的错误,比如var name=1;
局部作用域内,如果没有某变量,则默认会去找外层作用域查找,如果自己这个局部作用域内,如果有let或var或const声明了此变量,则会暂时性死区,会锁定本作用域,不去外面找
我们在全局作用域中或局部作用域中,使用var关键字声明的变量,都会被提升到该作用域的最顶部,这就是我们常说的变量提升

const声明的是常量,常量不可以修改。常量定义必须初始化值,如果不初始化值就会报错。特别注意的一点是const变量不能修改指针,但是可以修改值,比如我们定义一个对象,我们就可以修改对象里的属性值,但是不可以重写整个对象。使用const声明的常量没有var那样的变量提升,const声明的常量只在当前作用域中有效。而let声明的是变量,可以修改。

数组方法

下面是数组方法的一些基本例题:

const arr = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']

    //slice截取
    console.log(arr.slice(1, 3))  //返回一个新数组,从1开始截取,到3结束,但不包括3
    console.log(arr)  //原数组不变

    //splice 功能非常强大,可以在任意位置增删改
    //改
    arr.splice(1, 4, 1, 2, 3)//从1开始,删除4个,用后面的内容去填充替换
    console.log(arr)
    //删
    arr.splice(1, 4)
    console.log(arr)
    //增
    arr.splice(1, 0, 'b', 'c', 'd', 'e', 'f')
    console.log(arr)

    //concat 将两个或多个数组合并成一个新数组
    const  brr=[1,2,3,4,5,6,7,8]
    console.log(arr.concat(brr))

    //join 将数组转换为字符串
    const joinStr=arr.join('-')//括号里为空,默认用逗号隔开
    console.log(joinStr)

    //indexOf 在数组里,查找某个元素是否存在,如果不存在,则返回-1,存在则返回第一个值的索引index
    console.log(arr.indexOf('c'))
    console.log(arr.indexOf('i'))
    //lastIndexOf 某个元素在元素中最后一次出现的位置,用法同上

    //forEach 对数组中每个元素执行操作
    brr.forEach((value,index)=>{
        //console.log(value*2,index)
        brr[index]=value*2
    })
    console.log(brr)

    //map() 创建一个新数组,其中包含原数组中的每个元素经过函数处理后的结果
    console.log(arr.map((value,index)=>{
        return value*2
    }))
    //简写
    console.log(brr.map(value => value/2))    //箭头函数的参数如果有且仅有一个,括号可省略,语句如果只要有一条,花括号也可以省略,且自动return
    console.log(brr)

    //filter 过滤
    console.log(brr.map(value => value/2).filter(value =>value%2===0)) //filter括号里的函数,必须return一个条件(条件就是返回一个布尔值的表达式)

    //reduce 累加
    console.log(brr.map(value => value/2).filter(value =>value%2===0).reduce((value,preResult)=>{
        return preResult=preResult+value
    },0))
    console.log(brr.map(value => value/2).filter(value =>value%2===0).reduce((value,preResult)=>{
        return preResult=preResult*value
    },1))
posted @ 2023-06-30 16:18  ntbb  阅读(57)  评论(0)    收藏  举报