其他函数

190 阅读3分钟

1-数组中的其他函数

 // 对数组进行遍历
    var arr = [1, 2, 3, 4, 5]
    // forEach  each: 每一个。需要传递函数进去
    arr.forEach(function(item) {
        // console.log(item)
    }) 
    
    // filter
    // 我要过滤出来数组中大于5的数值 即选出大于5的数
    var arr1 = [23, 2, 1, 56, 6, 10]
    var arr2 = arr1.filter(function(item, index) {
    
        // item代表新数组
        // index代表索引下标
        
        // console.log(index)
        return item > 5
    })
    console.log(arr2)
    
    // some 找到数值为1的,返回true false 查找这个值是否存在于数组中!!!
    var arr3 = [6, 1, 3, 4, 10, 20]
    var arr4 = arr3.some(function(item, index) {
        return item == 1
    })
    console.log(arr4)
    
    // every 每一个
    var arr5 = [10, 20 , 30 , 33, 22, 355, 11]
    // 判断所有的值大等于10 所有数据大于等于10, 则返回true,有一个不满足条件就返回false
    var res = arr5.every(function(item, index) {
        return item >= 10;
    })
    console.log(res)
</script>

2-字符串中的函数

 1.trim
 <script>
    var input = "  asdfasdf  asdf as asd sd "
    // 去掉头和尾部空格
    var str = input.trim();
    console.log(str)
</script>

3-对象

  <script>
    var obj = {
        id: 1,
        name:"zhangsan",
        age: 20
    }

    // for in
    var arr = Object.keys(obj)
    // 利用数组遍历对象
    console.log(arr)
    arr.forEach(function(item) {
        console.log(obj[item])
    })
</script>

4-严格模式状态

 <script>
    'use strict';
    // 下面的代码会处于严格模式状态
    var num = 10
    console.log(num)
    
    // 2.不能随便删除变量
    // delete num // window.num

    // 3.this指向undefined
    function demo() {
        console.log(this) // 在严格模式下 是undefined
    }
    demo()

    // 4. 构造函数需要使用new
    function Person(sex) {
        this.sex = sex
    }

    var p1 = new Person("man")

    // 5. setTimeout
    setTimeout(function() {
        console.log(this) // 在定时器中this还是指向window
    })

    //6. 名字不能重复
    function demo(a, a) {
        console.log(a - a)
    }
</script>

5-高阶函数

 <script>
    // 高阶函  以函数作为参数或者以函数作为返回值。则就是高阶函数!!!
    function demo() {
        // setTimeout(function() {
        //     fn()
        // }, 2000)
        return function() {
            console.log("111")
        }
    }

    // demo函数称为高阶函数!!!
    var f1 = demo();
</script>

6-闭包

 <script>
    // 闭包的三个特点
    // 1.函数嵌套函数
    // 2.内部函数使用了外部函数的变量或者参数!!!
    // 3.导致使用的变量或者参数不会被直接被释放!!!!
    // 就形成了闭包!!!
    function fn1() {
        var num = 10;
        return function() {
            console.log(num)
        }
    }
    var fn2 = fn1()

    fn2()
    fn2();
</script>
案例:
<body>
<ul>
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
</ul>
<script>
    // 点击相应li,打印出来索引值,并且打印li里面的内容!!!
    
    1, 一般写法
    var liList = document.querySelectorAll("li")
    
    for(var i = 0; i < liList.length; i++) {
        // liList[i].index = i;
        liList[i].onclick = function() {
            // 点击的时候for循环早已经执行完毕了!!!
            // console.log(i)  // 5
            // console.log(this.index)
        }
    }
    
  2, 使用闭包的方法 
     for(var i = 0; i < liList.length; i++) {
          onclick 这个属性需要的是一个函数
          每当onclick被赋值一次,就会保存一个i值!!!
         liList[i].onclick = (function(i) {
             return function() {
                 console.log(i)
             }
         })(i)
     }
  3, 这也是一种闭包
    liList.forEach(function(item, key) {
        item.onclick = function() {
            console.log(key)
        }
    })
</script>
</body>

7- 递归函数

 <script>
    // 递归函数: 函数内部调用自己,这个函数就是递归!!!
    var count = 0
    function fn() {
        count++;
        if(count >=20) {
            return;
        }
        fn()
    }
    fn();

    console.log(count)
</script>
案例:阶乘
 <script>
    // 20  20! 20 * 19 * 18....1
    function fn(num) {
        if(num == 1) {
            return 1
        }
        return num * fn(num - 1)
    }

    // fn(20) = 20 * 19 * 18 * ....1;

    console.log(fn(3))
</script>

8-浅拷贝

<script>
    var arr1 = [1, 2, 3, 4]
    var arr2 = arr1; // 赋予的是一个地址
    arr2[0] = 100;
    console.log(arr1[0]) // 100 这里arr1[0]也发生了改变
</script>

9-深拷贝

  <script>
    // 在js中对象和数组、函数存在于堆内存中,所以arr1和arr2指的是同一个数组
    // 字面量存在于栈中 ,各自的不一样
    // 深度拷贝1  使arr1不发生改变
    var arr1 = [1, 2, 3, 4, 5]
    var arr2 = []
    for(var i = 0; i < arr1.length; i++) {
        arr2.push(arr1[i])
    }
    // console.log(arr2)
    arr2[0] = 100;
    // console.log(arr1)
    // console.log(arr2)

    // 深拷贝2
    var str = arr1.join(",")
    var arr3 = str.split(",")
    // console.log(arr3)

    // 深度拷贝3
    var arr4 = [1, 2, 3, 4, 5]
    var str = JSON.stringify(arr4) // 这是一个字符串
    var arr5 = JSON.parse(str)
    // JSON.parse(JSON.stringify(arr4))
    
    arr5[0] = 100;
    console.log(arr4)
    console.log(arr5)
</script>