文章目录
年末
新项目: 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() 初始化一个引用类型数据,那么就要小心了,会导致都执行同一个引用类型
解题中有例子!