typeof、is
// 收缩类型:判断是不是属于某个类型 // 使用typeof只对基础类型有效 // const isNum = (num:any) => typeof num === 'number' // 使用instanceof可以对引用类型进行区分 const isArrary = (arr:any) => arr instanceof Array // 自定义守卫:参数 is 类型 // 弥补使用收缩类型函数后,ts仍然识别为any,无法获取代码提示 const isString = (str:string):str is string => typeof str === 'string' const isNum = (num:any):num is number => typeof num === 'number' // 写一个函数:作用是判断传入的参数type是否object,如果是则对属性是number保留小数位2位,是string是去除空格,是函数就执行 // 等同于Object.prototype.toString.call const isObj = (arg:any) => ({}).toString.call(arg) === '[object Object]' const isFunction = (fn:any):fn is Function => typeof fn === 'function' function fn(data:any) { if (isObj(data)) { let val // 不可以使用for in,因为会遍历到原型的属性 Object.keys(data).forEach(item => { val = data[item] if (isNum(val)) { // 自定义守卫后是由代码提示的 data[item] = val.toFixed(2) } else if (isString(val)) { data[item] = val.trim() } else if (isFunction(val)) { // 这里独立调用,this会指向window // val() // 需要换到以下的形式调用 data[item]() } }) } } const kk = { a: 1.57771, b: ' 11 ', c: function() { // node环境中this是undefined console.log(this.a); return this.a } } fn(kk) console.log(kk);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律