记录前端工作中获得的经验(六)

2024-01-29 17:05:38 浏览数 (2)

如果定义了一个函数,能够通过传入的不同参数进行不同的操作,那最好写成一个对象,通过不同的参数,去调用这个对象的对应方法,如下(不要使用switch哈

代码语言:javascript复制
function doSth(type, a, b) {
  return sthObj[type](a, b)
}
const sthObj = {
    add(a, b) {
        return a   b
    }, 
    sub(a, b) {
        return a - b
    }
}
const res = doSth('add', 1, 2)
console.log(res)
  • 怎么判断一个对象的键值相不相同,我现在学会两种方法

(1)

代码语言:javascript复制
const obj1 = { name: 'yft', age: 20 }
const obj2 = { name: 'yft', age: 20 }
console.log(obj1 === obj2) //false 因为对象的地址肯定是不同的,所以为false

const res = Object.keys(obj1).every(i => obj1[i] === obj2[i])
console.log(res)  //true

(2) 但是不适用于复杂类型

代码语言:javascript复制
const obj1 = { name: 'yft', age: 20 }
const obj2 = { name: 'yft', age: 20 }

const res = JSON.stringify(obj1) === JSON.stringify(obj2)
console.log(res)  //true

如下,函数类型会被排除在外,无法判断

代码语言:javascript复制
const obj1 = { name: 'yft', age: 20, b: (a) => { return } }
const obj2 = { name: 'yft', age: 20, a: (a) => { return } }

const res = JSON.stringify(obj1) === JSON.stringify(obj2)
console.log(res)  //true
  • 关于枚举类型,基本类型比如字符串/数字/布尔值并不是对象而是原始值,是不可变的,没有属性,因此也没有可不可枚举的问题。 而对象和数组中,可枚举属性就是在循环中能循环到的属性,相反就是不可枚举的属性,在Object.defineProperty中可以将属性定义为不可枚举的。这样的话循环的时候不会循环到这个属性。一般来说,自定义添加的属性都是可以枚举的,而一些内建的属性是不可枚举的,比如length,还有原型链上的属性。(个人理解吧不一定对)
  • 如何用一行代码实现kebabCase
代码语言:javascript复制
const str = 'DataSource'
const res = str.replace(/([A-Z])/g, ($0, $1, index) => index === 0 ? $1.toLowerCase() : '-'   $1.toLowerCase())
// data-source

好好学一下replace的用法,十分强大

  • 在学习ts的过程中知道了extends的神奇之处,如果extends前面的是泛型,且泛型的类型是联合类型的时候,他会使用分配律计算结果,然后讲结果再组成一个联合类型,真的涨知识了。阮一峰的ts是真的强,讲得狠狠狠细致
  • 正则的规则是可以复用的,比如你将一部分的规则用括号()括起来,这就是第一组规则,当你想复用的时候,就用1即可,如果你第一次匹配的是xx,下一次复用的时候匹配的也得是一样的内容,我发现一个使用场景,就是匹配标签之间的内容, 标签的两边肯定都是一样的,h1肯定对应的还是h1, div对应的还是div,这时候就可以复用规则了。
代码语言:javascript复制
let res = '<h1>你好<111>我是内容</h1>'
.replace(/<([0-9a-z] )>(.*)</1>/gi, ($0, $1, $2) => $2);
// 其中的$2就是匹配到的标签内的内容
  • 经过同事的指点,明白了不要什么事都等准备好了再去做,要边实践边学习,自然而然的就会了
  • 快捷键,怎么向上插一行: Ctrl Shift Enter, 这个还是很实用的。
  • 了解一下正则的贪婪匹配和懒惰匹配。

0 人点赞