前端小知识点扫盲笔记记录12

前言

我是歌谣 放弃很容易 但是坚持一定很酷 微信公众号关注前端小歌谣带你进入前端巅峰交流群 今天继续对前端知识的小结

手写instanceOf

~<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8" />
		<meta http-equiv="X-UA-Compatible" content="IE=edge" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<title>手写instanceOf</title>
	</head>
	<body>
		<script>
			function myInstanceof(target, origin) {
				if (typeof target !== 'object' || target === null) return false
				if (typeof origin !== 'function')
					throw new TypeError('origin must be function')
				let proto = Object.getPrototypeOf(target) // 相当于 proto = target.__proto__;
				while (proto) {
					if (proto === origin.prototype) return true
					proto = Object.getPrototypeOf(proto)
				}
				return false
			}

			// 测试
			function Car(make, model, year) {
				this.make = make
				this.model = model
				this.year = year
			}
			const auto = new Car('Honda', 'Accord', 1998)
			console.log(myInstanceof(auto, Car)) // true
			console.log(myInstanceof(auto, Object)) // true
		</script>
	</body>
</html>

手写节流

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8" />
		<meta http-equiv="X-UA-Compatible" content="IE=edge" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<title>手写节流</title>
	</head>
	<body>
		<script>
			// 	节流就是限制一个函数在一段时间内只能执行一次,过了这段时间,在下一段时间又可以执行一次。应用场景如:
			// 输入框的联想,可以限定用户在输入时,只在每两秒钟响应一次联想。
			// 搜索框输入查询,如果用户一直在输入中,没有必要不停地调用去请求服务端接口,等用户停止输入的时候,再调用,设置一个合适的时间间隔,有效减轻服务端压力。
			// 表单验证
			// 按钮提交事件。

			function throttle(fn, delay) {
				// 重置定时器
				let timer = null
				// 返回闭包函数
				return function () {
					// 记录事件参数
					let args = arguments
					// 如果定时器为空
					if (!timer) {
						// 开启定时器
						timer = setTimeout(() => {
							// 执行函数
							fn.apply(this, args)
							// 函数执行完毕后重置定时器
							timer = null
						}, delay)
					}
				}
			}
		</script>
	</body>
</html>

手写防抖函数

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8" />
		<meta http-equiv="X-UA-Compatible" content="IE=edge" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<title>手写防抖</title>
	</head>
	<body>
		<script>
            //函数防抖,就是指触发事件后,函数在 n 秒后只能执行一次,如果在 n 秒内又触发了事件,则会重新计算函数的执行时间。
			// fn是你要调用的函数,delay是防抖的时间
			function debounce(fn, delay) {
				// timer是一个定时器
				let timer = null
				// 返回一个闭包函数,用闭包保存timer确保其不会销毁,重复点击会清理上一次的定时器
				return function () {
					// 保存事件参数,防止fn函数需要事件参数里的数据
					let arg = arguments
					// 调用一次就清除上一次的定时器
					clearTimeout(timer)
					// 开启这一次的定时器
					timer = setTimeout(() => {
						// 若不改变this指向,则会指向fn定义环境
						fn.apply(this, arg)
					}, delay)
				}
			}

			// 搜索框搜索输入。只需用户最后一次输入完,再发送请求;
			// 用户名、手机号、邮箱输入验证;
			// 浏览器窗口大小改变后,只需窗口调整完后,再执行resize事件中的代码,防止重复渲染。
		</script>
	</body>
</html>

找出在第一个数组出现,第二个数组不出现数字

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>数组问题</title>
</head>
<body>
  <script>
    var geyao = ["1","2","3","4"]
    var fangfang=["1","5"]

    function getArr(arr1,arr2){
      var str=arr2.join("")
      console.log(str,"str")
      var result=[]
      for(var i=0,x=0;i<arr1.length;i++){
        if(str.indexOf(arr1[i])==-1){
          result[x]=arr1[i]
          x++
        }
      }
      return result
    }
    console.log(getArr(geyao,fangfang))
  </script>
</body>
</html>

数组去重方式1

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    var geyao = [1, 2, 3, 4, 6, 7, 1, 2, 3, 8, 9]

    function ArrayCommon(arr) {
      //判断是不是数组  不是数组就返回一个false
      if (!Array.isArray(arr)) {
        console.log('这不是一个数组哦')
        return
      }
      let res = [],
        obj = {}
        //如果对象的属性值不存在 就放进去 不然就赋值+1
    for (let i = 0; i < arr.length; i++) {
        if (!obj[arr[i]]) {
       
            res.push(arr[i])
            obj[arr[i]] = 1
            console.log( obj[arr[i]],"obj[arr[i]]")
        } else {
            obj[arr[i]]++
            console.log( obj[arr[i]],"obj[arr[j]]")
        }
    }
    return res

    }

    console.log(ArrayCommon(geyao, 'geyao'))
  </script>
</body>

</html>

数组去重方式2

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    var geyao = [1, 2, 3, 4, 6, 7, 1, 2, 3, 8, 9]

    function ArrayCommon(arr) {
      //判断是不是数组  不是数组就返回一个false
      if (!Array.isArray(arr)) {
        console.log('这不是一个数组哦')
        return
      }
      return [...new Set(arr)]

    }

    console.log(ArrayCommon(geyao, 'geyao'))
  </script>
</body>

</html>

数组去重方式3

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    var geyao = [1, 2, 3, 4, 6, 7, 1, 2, 3, 8, 9]

    function ArrayCommon(arr) {
      //判断是不是数组  不是数组就返回一个false
      if (!Array.isArray(arr)) {
        console.log('这不是一个数组哦')
        return
      }
      //先对数组进行排序
      arr = arr.sort()
      console.log(arr,"arr")
      //判断相邻得元素是不是相等 如果不相等就放进数组里面去
      let res = []
      for (let i = 0; i < arr.length; i++) {
        if (arr[i] !== arr[i - 1]) {
          res.push(arr[i])
        }
      }
      return res
    }

    console.log(ArrayCommon(geyao, 'geyao'))
  </script>
</body>

</html>

数组去重方式4

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8" />
		<meta http-equiv="X-UA-Compatible" content="IE=edge" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<title>数组去重的第一种方式</title>
	</head>
   
	<body>
        <div id="geyao"></div>

	</body>
    <script>
        var geyao = [1, 2, 3, 4, 6, 7, 1, 2, 3, 8, 9]
        function ArrayCommon(arr) {
            //判断是不是数组  不是数组就返回一个false
            if (!Array.isArray(arr)) {
                console.log('这不是一个数组哦')
                return
            }
            //设置初始值为空数组
            var res = []
            //数组遍历
            for (let i = 0; i < arr.length; i++) {
                //设置一个初始值
                let flag = true
                //继续二次遍历 如果值相同 就不放入新数组
                for (let j = 0; j < res.length; j++) {
                    if (arr[i] === res[j]) {
                        flag = false
                        break
                    }						
                }
                if (flag) {
                        res.push(arr[i])
                    }
                //当flag1为true的时候 数组push
            }
            return res
        }

        console.log(ArrayCommon(geyao, 'geyao'))
        
        // document.getElementById("geyao").innerText=ArrayCommon(geyao)
    </script>
</html>

数组去重方式5

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8" />
		<meta http-equiv="X-UA-Compatible" content="IE=edge" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<title>数组去重的第二种方式</title>
	</head>
   
	<body>
        <div id="geyao"></div>

	</body>
    <script>
        var geyao = [1, 2, 3, 4, 6, 7, 1, 2, 3, 8, 9]
        function ArrayCommon(arr) {
            //判断是不是数组  不是数组就返回一个false
            if (!Array.isArray(arr)) {
                console.log('这不是一个数组哦')
                return
            }
            //设置初始值为空数组
            var res = []
            //数组遍历 
            for (let i = 0; i < arr.length; i++) {
                //只要这个值在数组中是唯一出现就push到新数组里面
                if(res.indexOf(arr[i])===-1){
                    res.push(arr[i])
                }     
            }
            return res
        }

        console.log(ArrayCommon(geyao, 'geyao'))
        
        // document.getElementById("geyao").innerText=ArrayCommon(geyao)
    </script>
</html>

总结

我是歌谣 最好的种树是十年前 其次是现在 加油 歌谣

猜你喜欢

转载自juejin.im/post/7255855818595336250