【工作中遇到的坑总结_2020_12】逻辑与或非、过滤对象、Array.fill()

年末

新项目: uniapp-uview

自学的路上还是比较艰苦的,好在比较锻炼个人能力。

首先拉一个uniapp 项目,
然后准备跑到小程序模拟器上

端口号被占用,杀掉某个进程,释放掉端口号

首先通过 netstat -ano 查看情况
然后taskkill /pid 11512 -f 杀掉 11512 的端口
在这里插入图片描述

netstat -ano

taskkill /pid 11512 -f

第二周

vscode 快速转移到某行

ctrl + G 然后输入行数

新运算:?.

今天学了几个非常有趣的新知识

举一个例子

let address = {}
const city = address?.city;
console.log(city);	// undefined

在举一个栗子

let address = {
    city:'黑龙江'
}
const city = address?.city;
console.log(city);  // 黑龙江

可以看到 ?. 是在对象里判断是否有这个属性,有的话,取出来,没有的话赋值为undefined ,防止报错了。

新运算:??

也是新提出的方法,使用的栗子如下

function greet(input) {
    return input ?? "Hello world";
}
console.log(greet('你好')); 	// 你好
console.log(greet(undefined)); 	// Hello world
console.log(greet(null)); 		// Hello world

这两个栗子都是我在babel 官网上看到的。挺有意思的索性记一下,目前在最新chrome 中使用也没什么问题

第一周

12-03

动态显示 和 逻辑与或非 的恩怨情仇

我个人对逻辑处理这方面,比较拉跨,借做这个功能的机会,赶快记录输出一波

哎,今天写一个if,杀了我3个脑细胞,厚葬的同时,反思了一波,具体场景如下
需求:根据后台传递的值,动态的显示列表。

其实没啥难的,想好了就简单了

  • 后台传递的是null,好,那么我们列表全部显示
  • 如果是一个对象,并且name属性为1,那么我们展示name这一列
  • 如果属性值为0 ,那么隐藏name列;

首先呢,我来判断一下这个后台传过来的值,并且设置一个变量 isAutoFlag ,表示是否动态显示
然后,把对象中的数字处理了一遍,因为我发现v-if 值为字符串"0"时,他表示的也是

后台传递给我的值如下
在这里插入图片描述
我自己在处理一下数据
在这里插入图片描述
然后到了比较重要的地方了,(我脑细胞死掉的元凶),我怎样写 v-if
当当!没错,我拿了个小本本梳理了一下,然后撸出个这么一坨儿代码
在这里插入图片描述

v-if 的判断问题

在v-if 中 字符串的0 为真
在这里插入图片描述

什么意思呢

  • 如果全部显示的话,那么isAutoFlag 等于 false ,短路了,!false 为真,直接显示出来就好了
  • 如果动态配置,isAutoFlag 等于 true,并且判断 属性 == 0
    • 如果属性 ==0 那么两个true 整体为true 然后非一下~不显示了
    • 如果属性!=0 那么就要显示它嘛,整体为 false,然后非一下~显示了

没错,就是这么拗!大学离散好好学哦!!

12-02

解决授权死循环的问题

问题场景,扫码报名的时候需要获取用户的 unionId ,如果 wx.login()中没有 unionId 的话,就需要用wx.getUserInfo 来获取。

wx.getUserInfo是需要获得用户权限,我遇到死循环是因为把判断逻辑放到了onload里了,导致用户即使获取了权限,页面也停留在获取权限的页面上,只能重新进入小程序

12-01

处理传递到后端的对象,防止有 null,或者 undefined

情景:后台发现有 null 或者 undefined 了,让我前台来过滤一下数据

我之前的处理逻辑是这样的:

// 之前的逻辑
Object.getOwnPropertyNames(param).forEach((item, index) => {
   if (param[item] == null || param[item] == undefined) {
        param[item] = "";
    }
});

后来我搜了搜, mdn 上关于这个方法的介绍,比较重要的一点就是:返回一个包括不可枚举属性组成的数组

我在想一个问题:过滤的时候如何高效一点呢?
那么我只拿到对象中的可枚举属性就可以了啊,如果用for in 的话,还会去遍历原型链,如果用Object.getOwnPropertyNames() ,他会拿到不可枚举的属性键名。

let cat = { name: '猫' }
Object.defineProperty(cat, "sound", {
    enumerable: false,
    configurable: false,
    writable: false,
    value: "喵喵"
});
console.log(cat);

在这里插入图片描述

接着,如果我在原型上加一条属性,然后用 for in 来遍历

let cat = { name: '猫' }
Object.defineProperty(cat, "sound", {
    enumerable: false,
    configurable: false,
    writable: false,
    value: "喵喵"
});
cat.__proto__.selfInfo = "我是一只猫";
for (let x in cat) {
    console.log(x);
}
console.log(cat);

在这里插入图片描述
然后我用 console.log(Object.getOwnPropertyNames(cat)); 打印了一下,并没有原型连上的属性
在这里插入图片描述
最后我用Object.keys(cat) 来搞一搞,发现如下!
在这里插入图片描述
嗯所以我觉得过滤的话用 Object.keys() 就可以了~

let params = {
    a: null,
    b: undefined
}
Object.keys(params).forEach(
    (item, index) => {
        if (
            params[item] == null ||
            params[item] == undefined
        ) {
            params[item] = "";
        }
    }
);
Array.fill

刷题的时候,遇到个坑,已经总结了~
一句话在总结一下吧,就是如果用 Array.fill() 初始化一个引用类型数据,那么就要小心了,会导致都执行同一个引用类型
解题中有例子!

矩阵置换解题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值