前端零碎知识补漏

前言

主要用来记录自己在学习过程中碰到的一些问题和知识点,有错望指正

2020-01-22

  1. 使 input/ textarea/ select 标签为必填的属性为:required

  2. input 单选框只有在 name 相同的情况下才有单选效果,label 标签的使用for=“id” 进行绑定,使得点击label也可以触发相应的 checked 发生改变

    <input type="radio" name="sex" id="male" value=""> <label for="male"></label>
    <input type="radio" name="sex" id="female" value=""> <label for="female"></label>
    
  3. 垂直对齐方式设置: vertical-align 详情见 CSS vertical-align

  4. 标题前icon的设置:

    <link rel="shotcut icon" href="./imgs/favicon.ico"/>
    
  5. font-face 的基本使用方法

    @font-face{
    	font-family: iconfont;
    	src: url('./css/iconfont.woff') format('woff')
    }
    
  6. 组件化编码的基本步骤:

  • 拆分组件
  • 静态组件
  • 初始化显示
  • 动态效果
  1. window.confirm(message) :弹出提示框,点击确认返回true,点击取消返回false

  2. 在编写Vue组件时要注意:数据定义在哪个组件,则更新数据的行为就应该定义在哪个组件

  3. array.reduce 的使用,可以用来统计 详情见 JavaScript reduce()

    语法:array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
    例子:todos.reduce((total, todo) => total + (todo.finished?1:0), 0)
    
  4. 存储数据 localStoragesessionStorage

  • 其中 localStorage 将保存到本地硬盘,除非手动删除不然永久保存
  • sessionStorage将保存在内存中,关闭标签或窗口后消失
  • 基本用法:
    存储:window.localStorage.setItem('key', value)
    读取:window.localStorage.getItem('key')
    删除:window.localStorage.removeItem('key')
    
  • 由于以键值对(字符串)的形式录入,如果要存入的是数组(对象)记得在存储时调用JSON.stringify(),读取时调用 JSON.parse() 来保持对象的结构

2020-01-27

  1. 为什么vue中的data要采用函数形式:如果写成对象的形式,所有组件实例就会共用一个数据空间。详:

    组件中的data写成一个函数,数据以函数返回值形式定义,这样每复用一次组件,就会返回一份新的data,类似于给每个组件实例创建一个私有的数据空间,让各个组件实例维护各自的数据。而单纯的写成对象形式,就使得所有组件实例共用了一份data,就会造成一个变了全都会变的结果。

2020-04-24

  1. 判断数组是否包含某对象

    JSON.stringify(arr).indexOf(JSON.stringify(obj)) === -1
    
  2. 判断两个对象是否相等

    JSON.stringify(obj1) === JSON.stringify(obj2)
    
  3. this的指向问题

  • this 指向的是直接调用该函数的对象
  • 任何函数本质上都是通过对象来进行调用,如果没有指定对象则this指向window(global)
  • 在严格模式下,this 不允许指向全局对象
  1. 关于JS代码是否要加分号的问题
  • 加不加分号只是一种代码风格,视情况而定
  • 绝大部分情况下都不需要加分号
  • 在句子以小括号/中括号开头时,需在其前一句末添加分号
  1. 深拷贝
  • 如果只有一层,可以利用JSON.stingifyJSON.parse来进行深拷贝

    let b = JSON.parse(JSON.stringify(a))
    

    但也有其局限性,详情见使用JSON深拷贝的局限性

  • 如果不考虑循环引用的情况下,可以采用以下方法进行深拷贝

    function deepClone(obj) {
    // 如果obj为null或基本数据类型,则直接返回
    if (obj === null || typeof obj !== 'object') {
        return obj
    }
    
    let newObj
    // 如果obj为数组或对象,则对其每项进行递归拷贝
    if (Array.isArray(obj)) {
        newObj = []
        obj.forEach((item) =>{
            newObj.push(deepClone(item));
        })
    } else if (typeof obj === 'object') {
        newObj = {}
        for (let key in obj) {
            newObj[key] = deepClone(obj[key]);
        }
    }
    return newObj
    

}
```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值