本地存储和正则的知识

238 阅读2分钟

console.log 与 console.dir的区别

  <body>
    <button>点击</button>
    <script>
      /* 
        区别:
        有时候  我们使用console.log  打印dom元素的时候  输出一个标签格式  而不是一个对象格式
        console.dir   输出dom元素的元素  总是对象格式
        */
      const btn = document.querySelector('button');
      console.log(btn);   //<button></button>
	console.dir(btn)    //button
    </script>
  </body>

区分方法和属性:

property:属性

method:方法:

代码提示:

页面换肤功能; ``

input 标签 具有 type="color" 属性 可以点击 绑定 change 事件 触发 就调用

兼容问题---chorme 用的少 ie全军覆没

本地存储

存储普通字符串 不需要转JSON格式 直接储存 或 取使用

    <script>
      //  html5 就有了
      //   localStorage
      // 1,生命周期 永久生效,除非手动删除  否则关闭页面也存在
      // 2,多个窗口(页面)  共享(同一浏览器可以共享)
      // 3,以键值对形式存储使用
      // 存储数据:  localStorage.setItem(key,value)
      // 获取数据:  localStorage.getItem(key)
    </script>

换肤案例

<!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>
    <!--  -->
    <input type="color" name="" id="color">
    <script>
        const color = document.querySelector('#color')
        // 需要给这个标签 绑定一个  change  事件  -- 选好值之后   就会触发
        // can i use 里查找   input type="color"   有兼容性 
        color.addEventListener('change',function(){
            // 通过  value属性 来获取   
            // 设置到body 标签中即可
            console.log('this.value  ----->  ', this.value);
            document.body.style.backgroundColor=this.value
            localStorage.setItem('setBackgroundColor',this.value)
        })
        window.addEventListener('load',function(){
            document.body.style.backgroundColor = localStorage.getItem('setBackgroundColor')
        })
    </script>
</body>
</html>

学生就业 薪资 --本地储存

对于复杂数据类型 ---本地存储

先要转成 字符串格式 JSON.Stringfy(要存的对象或者数组)

对于要使用本地存储中的数据 先 取出来

然后 使用 JSON.parse(取出后保存的数据) ---可以使用

本地存储时,取数据 没有返回 null

取数据要做判断

sessionStorage

关闭窗口就消失 会话存储 (打开页面到关闭窗口)

本地储存

    /* 
    localStorage
        本地存储四个API
        1,存  localStorage.setItem(key,value)
        2,取  localStorage.getItem(key)
        3,删除一个  localStorage.removeItem(key)
        4,清空  删除全部  localStorage.clear()   
        */
例子
       //     for(let i = 0;i<100;i++){
       //      localStorage.setItem('kk',`${i}个数据`)
       //    }
       //  localStorage.removeItem('kk')
       //   localStorage.clear()

       // 本地存储的技术  sessionStorage 会话(打开页面到关闭页面之间的过程  一次会话  ajax node 会用到)  存储它的用法和localStorage用法一样
       // 区别只有一个   :
       // sessionStorage:  关闭页面后  数据会丢失
       // localStorage:  除法手动删除  否则一直存在  直到天荒地老
       // 存数据
      sessionStorage.setItem('SS', 123);
       // 取数据
       //   sessionStorage.getItem('SS')
       //   console.log(' sessionStorage.getItem  ----->  ', sessionStorage.getItem('SS') );
       // 删除
       //   sessionStorage.removeItem('SS')
       // 清空会话存储空间
      sessionStorage.clear();

自定义属性

data-自定义属性: 传统的自定义属性没有专门的定义规则,开发者随意定值,不够规范,所以在html5中推出来了专门的data-自定义属性 在标签上一律以data-开头 在DOM对象上一律以dataset对象方式获取

正则

  • 表示重复至少 1 次 ? 表示重复 0 次或1次
  • 表示重复 0 次或多次 {m, n} 表示复 m 到 n 次

固有属性-与-自定义属性

<!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>
    <a href="http://www.baidu" aa="AA" data-aa="AA">a</a>
    <button data-pp="PP">点击</button>
    <script>
      const a = document.querySelector('a');
      console.log('a.getAttribute(aa)  ----->  ', a.getAttribute('aa'));
      // a.setAttribute('aa',"BB")
      // a.removeAttribute('aa')
      // console.log('a.getAttribute(data-aa)  ----->  ', a.getAttribute('data-aa'));
      // console.log('a.getAttribute(herf)  ----->  ', a.getAttribute('href'));
      // a.removeAttribute('data-aa')   //可以删除data-xxx
      // a.setAttribute('data-aa',"BB")   //可以设置data-xxx
      // a.removeAttribute('href')   //可以删除 固有属性
      //   a.setAttribute('href', 'kk'); //可以修改  固有属性值
      // const btn = document.querySelector('button')
      // console.log('btn.dataset.pp  ----->  ', btn.dataset.pp);
      // btn.dataset.pp = "gg"

      /* 
        一:
        自已定义的:
        <a aa="AA"><a/>
        const a = document.querySelect('a')
        获取:
        getAttribute(key)
        a.getAttribute('aa')
        设置:
        setAttribute(key,value)
        a.setAttribute('aa',"BB")
        删除
        removeAttribute(key)
        a.removeAttribute("aa")

       
           <a data-aa="AA"><a/>
        const a = document.querySelect('a')
         二:
        自己定义:data-xxx
        获取:
        dom.dataset-xxx
        a.dataset.aa
        修改值:
        dom.dataset.xxx = 值
        a.dataset-aa = "皮皮"

         <a aa="AA"><a/>
        const a = document.querySelect('a')
        三:固有属性
        固有属性通过点语法获取
        a.id  获取id
        固有属性通过点语法修改
        a.href = "kk"
          自定义属性  通过点语法: 不能获取和设置

        总结:
        Attribute()属性比data-xxx
        强大
        Attribute(属性名) 可以获得任意的属性
        包括固有属性和 自定义属性
            总结:
           Attribute()  可以获取到任意的属性
           (固有属性和h5建议的自定义属性)
          //  
         
        */
    </script>
  </body>
</html>

设置固有属性

设置自定义属性

修改自定义

删除自定义属性

自定义属性使用

高阶函数

什么是高阶函数

把一个函数 看成是个普通属性 应用在 形参 或者返回值 技术

把函数当成形参来使用:定时器

把函数里面返回 一个函数也是高阶函数

重绘和回流

事件绑定-取消绑定

可以 绑定 多个同名事件

事件流动

碰到底部;元素触发事件dom 触发事件 叫 目标阶段

底部dom触发事件 叫 :目标阶段

最底层的元素触发事件:一个元素占一个阶段 ,叫 目标阶段

字符串 转大写,转小写 ,转成数组

1,转大写 toUpperCase()

2,转小写 toLowerCase()

3,转数组 split("") //有什么符号 里面就放什么符号

数组转成字符串

join()

let arr = [1,2,3]
let symbol = arr.join('')  //"123"
let str = arr.join('-')  //"1-2-3"

 // 数组转字符串  join方法:

   //  const arr = ['a', 'b', 'c'];

   //  console.log(arr.join('')); //abc

   //  console.log('arr.join("*")  ----->  ', arr.join("*"));



   // 连接  数组和数组之间的连接

   // const arr1 = ['1','2','3']

   // const arr2 =['a','b','c']

   // // 将两个数组合并到一个数组

   // arr1.concat(arr2)  //表示合并

   // console.log('arr1.concat(arr2)  ----->  ',arr1.concat(arr2)  );



   // 字符串也有一个contat() 也是表示合并

   // const str1 = '123'

   // const str2 = 'abc'

   // console.log('str1.concat(str2)  ----->  ', str1.concat(str2));

   // console.log('str1 + str2  ----->  ', str1 + str2);
量词

点代表 除换行 的任意一个字符

中括号表示范围 一个 [a-zA-Z0-9] 中任意一个

手机正则

邮箱

表示点(。) 号本身 加 反斜杠

修改input 框内的placeholder 颜色

webAPI

区分属性和方法:

属性:一般使用.点语法

proprety

const a = document.querySelector('a')

a.href href属性

方法:一般后面有小括号

method

const arr = []

arr.push() 数组的追加元素的push方法

可以查看代码提示:一般 正方体 方法

长方形 属性

本地存储

localStorage

setItem('key',value)存

getItem(key)取

生命周期永久,除非手动清除

sessionStorage

setItem('key',value)存

getItem(key)取

浏览器关闭,清除

元素属性

自定义属性

h5建议的写法

data-index

dataset.index

存储 data-index

取 dom.dataset.index

改 dom.dataset.inex = "value"

自己随便定义

如:

存 dom.Attribute("aa",value)

取 dom.Attribute("aa")

改 dom.Attribute("aa","cc")

删 dom.Attribute('aa')

固有属性

取 dom.id dom.href dom.src

改 dom.id = "你好"

高阶函数

什么是高阶函数

一个函数被当成参数使用

如:

function getName(){

console.log(123)

}

setInterval(getName,1000) //一秒打印一次

重绘和回流

重绘

页面颜色,字体颜色的改变,不影响结构变化

回流

页面字体大小的改变,格式改变,定位,浮动 等

要减少回流

损耗电脑性能

重绘不一定回流

回流一定重绘

事件绑定-取消

前提:addEventListener绑定事件 并是 具名函数才可以取消事件绑定

匿名函数不可以取消事件绑定

addEventListener可以绑定多个同名事件

语法:

dom.removeEventListener(事件类型,处理函数)

事件的流动三个过程

addEventListener可以绑定多个同名事件

事件捕获

由父到子

事件冒泡

事件委托的原理

事件目标阶段

当最里层的元素触发事件

被称为:处于目标阶段

绑定事件第三个参数

true 设置为 捕获

默认false /不写 默认冒泡

字符串方法:

小写字母转大写字母

dom.toUpperCase()

大写字母转小写字母

dom.toLowerCase()

两个字符串合并

let str1 = '123'

let str2 = 'abc'

console.log(str1.concat(str2))

方法二: console.log(str1 + str2)

字符串转数组方法:

split()

中间有- 就 split('-')

可以转换为数组

const str = "a-b-c"

console.log(str.split('-'))

//['a','b','c']

数组的方法:

合并两个数组方法

concat()

let arr1 = [1,2,3]

let arr2 = ["a",'b','c']

console.log(arr1.concat(arr2))

//[1,2,3,"a","b","c"]

数组变为字符串

数组.join('')

join可以返回字符串,也

可以中间用符号连接

const arr = ['a','b','c']

console.log(arr.join('')

//abc

const arr = ['a','b','c']

console.log(arr.join("-"))

a-b-c

正则表达式:

什么是正则表达式

正则的数据类型是对象

定义的一种检测寻找匹配的规则

检测正则的方法:

test()

返回一个Boolean值

let reg = /123/

let str = "12345"

reg.test(str) //true 返回里面有 123 就为true

定义规则:

let reg = // //是正则字面量

边界符

/^/

表示匹配以这个开头

let reg = /^123/ 表示匹配必须要以123开头

否则为false

/$/

表示匹配以这个结尾

let reg = /789$/ 表示匹配必须要以789结尾

否则为false

/^$/

表示精确匹配 在开头和结束一致下 里面 一一对应

let reg = /^abcd$/

表示 检测的必须要是 abcd

否则为false

量词

表示出现一个或者多个

表示至少是一个

表示 0个或者1个

{a}

表示 a 个

{a,}

表示至少a 个

{a,m}

表示 至少a 个 最多 m 个

分支主题

字符

. 点

表示 除了空格以外的任何字符

\d

表示 0-9 的任意字符 [0,9]

\D

表示 [0,9] 以外的任意字符 [^0,9]

\w

数字,字母 下划线 任意一个 [a-zA-Z0-9]

\W

相当于[^\d] 除所有字母,数字 ,下划线以外的字符 相当于[^A-Za-z0-9]

s

匹配所有的空格符(包括换行符,制表符,空格符) ,相当于[\t\r\n\v\f]

S

匹配所有空格符以外的字符 ,相当于[^\t\r\n\v\f]

不需要背正则

可以根据文档看懂正则,会使用正则即可

工作当中,可以取cv别人写好的代码

image-20220415133228700.png

image-20220415133506151.png

image-20220415133517260.png

image-20220415133617196.png

image-20220415133643926.png

image-20220415133732210.png

image-20220415133905555.png

image-20220415133914395.png

image-20220415134159947.png

image-20220415134333400.png

image-20220415134447775.png

image-20220415134505179.png

image-20220415134511764.png

image-20220415134517727.png

image-20220415134523882.png

image-20220415134624874.png

image-20220415134638715.png

image-20220415143136495.png

image-20220415143156799.png

image-20220415143231075.png

image-20220415182956306.png

image-20220415183222779.png

image-20220415235240869.png

image-20220415235325410.png

image-20220415235336559.png

image-20220415235353870.png