
获得徽章 0
/** 异步函数的执行顺序 记录一下*/async function yibu(){
console.log('first')
setTimeout(() => {
console.log('third')
}, 1);
}
function tongbu(){
console.log('second')
}
yibu()
tongbu()
/**
* first -> second -> third
*/
console.log('first')
setTimeout(() => {
console.log('third')
}, 1);
}
function tongbu(){
console.log('second')
}
yibu()
tongbu()
/**
* first -> second -> third
*/
展开
评论
点赞
三种隐藏节点的方法对比:display:none 不删除dom节点,仅仅是取消元素的站位
visbility:hidden 不删除节点也不取消站位
React 中的 {visible && <div>嘻嘻嘻</div>} 这个 visible 的 Boolean 值决定了节点是否渲染在 dom 树上
visbility:hidden 不删除节点也不取消站位
React 中的 {visible && <div>嘻嘻嘻</div>} 这个 visible 的 Boolean 值决定了节点是否渲染在 dom 树上
6
点赞
e.stopPropagation()->将本节点的冒泡时间遏制,不再继续上传。
e.preventDefault()->阻止默认事件,如 链接点击必然跳转,表单点击必然提交。阻止之后点击链接不再跳转,点击表单提交不再提交。
e.preventDefault()->阻止默认事件,如 链接点击必然跳转,表单点击必然提交。阻止之后点击链接不再跳转,点击表单提交不再提交。
评论
点赞
onContextMenu={(e: React.MouseEvent<HTMLDivElement, MouseEvent>) => {
/**onContextMenu 加在哪个节点上,e.currentTarget就是谁;触发右键点击事件的元素是谁
*e.target 就是谁 */
console.log('菜单右键点击事件', e.target, e.currentTarget);
}}
/**onContextMenu 加在哪个节点上,e.currentTarget就是谁;触发右键点击事件的元素是谁
*e.target 就是谁 */
console.log('菜单右键点击事件', e.target, e.currentTarget);
}}
展开
评论
点赞
/**TS 中 infer */
type a<T> = T extends (a:infer R) => infer R ? R : string;
/**number 不符合 (a:infer R) => infer R 这种格式 所以返回的是 string */
const x: a<number> = '123'
/**(arg: number) => string 不符合 (a:infer R) => infer R 的格式,因为参数 arg 和返回值不是同一种类型 */
const y: a<(arg: number) => string> = '123'
/**完美符合 (a:infer R) => infer R 的格式 所以返回的是 R ,那么 R 是什么类型呢? R 就是我传的函数中 arg 的类型 number */
const z: a<(arg: number) => number> = 123
/**同上 */
const w: a<(arg: string[]) => string[]> = ['xixi']
/**TS中 Omit */
interface TypeA {
name: string;
age: number;
}
/**从一个接口中剔除这个接口的一些键,然后返回一个新的接口 */
type withOutAge = Omit<TypeA, 'age'>
/**TS中的 keyof 返回一个接口的所有键组成的一个枚举类型*/
interface TypeB {
name: string;
age: number;
school: string;
}
type KeyOfTypeB = keyof TypeB;
const m: KeyOfTypeB = 'name';
type a<T> = T extends (a:infer R) => infer R ? R : string;
/**number 不符合 (a:infer R) => infer R 这种格式 所以返回的是 string */
const x: a<number> = '123'
/**(arg: number) => string 不符合 (a:infer R) => infer R 的格式,因为参数 arg 和返回值不是同一种类型 */
const y: a<(arg: number) => string> = '123'
/**完美符合 (a:infer R) => infer R 的格式 所以返回的是 R ,那么 R 是什么类型呢? R 就是我传的函数中 arg 的类型 number */
const z: a<(arg: number) => number> = 123
/**同上 */
const w: a<(arg: string[]) => string[]> = ['xixi']
/**TS中 Omit */
interface TypeA {
name: string;
age: number;
}
/**从一个接口中剔除这个接口的一些键,然后返回一个新的接口 */
type withOutAge = Omit<TypeA, 'age'>
/**TS中的 keyof 返回一个接口的所有键组成的一个枚举类型*/
interface TypeB {
name: string;
age: number;
school: string;
}
type KeyOfTypeB = keyof TypeB;
const m: KeyOfTypeB = 'name';
展开
2
1
赞了这篇文章
赞了这篇文章
赞了这篇文章
分享一个快速判断JS的对象到底是object还是数组还是函数的方法
function sum(){
}
let arr = [1,2]
let obj = {a:1}
console.log(Object.prototype.toString.call(sum))//[object Function]
console.log(Object.prototype.toString.call(arr))//[object Array]
console.log(Object.prototype.toString.call(obj))//[object Object]
function sum(){
}
let arr = [1,2]
let obj = {a:1}
console.log(Object.prototype.toString.call(sum))//[object Function]
console.log(Object.prototype.toString.call(arr))//[object Array]
console.log(Object.prototype.toString.call(obj))//[object Object]
展开
6
点赞
求大神指点!
这是一段手动实现JS中的call()函数的代码,写完之后发现会给传入call() 函数的对象(截图中的obj对象)添加一个额外的属性,这是属性就是调用call()函数的那个函数。不知道怎么改进,感觉额外添加属性并不是太好。
这是一段手动实现JS中的call()函数的代码,写完之后发现会给传入call() 函数的对象(截图中的obj对象)添加一个额外的属性,这是属性就是调用call()函数的那个函数。不知道怎么改进,感觉额外添加属性并不是太好。
5
点赞