uni-app 关于undefined和null 作为判断条件

本文探讨了在uni-app中如何利用undefined作为条件判断。当后台返回的数据对象值为undefined时,这种情况在if语句中等价于false。以一个具体的业务场景为例,当已报价时间为空且截至报价时间大于等于当前时间时,允许进行报价。文章还提到了时间日期转换的util工具在处理此类问题中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前提需求:后台得到的数据对象中的某个值没有。会提示undefined,此时可以作为if 条件语句的判断,在条件判断中 undefined 的作用=false

具体业务:已报价时间为空且截至报价时间大于等于此刻的时间-----可报价

具体代码:

export default{
 data(){
 return{
   allow:false   //控制是否可以报价
 }
 },
 methods:{
    getData(){
    //后台请求得到数据后
    // 判断报价单,是否允许报价
		if (!this.Data.qDate) {      //Data 为后台得到数据 qDate为报价时间,没有undefined=false
			const oDateTime = new Date().getTime();  //此刻的时间 转为时间戳
			let pqExpiryDate = oDateTime;
			if (this.Data.expiryDate) {   //expiryDate为截至时间 有的话
			ExpiryDate = dateUtil.strToDate(this.Data.expiryDate).getTime(); 
			//转为时间戳
			//dateUtil.strToDate是一个日期转换的方法js(见下面代码)
					}
			if (oDateTime <= pqExpiryDate) {     //比较
					this.allowQuotation = true;   //允许报价
							}
						}

   }

}
}

时间,日期转换util

   /**
 * 字符串转换为日期对象
 * @param dateStr string 格式为yyyy-MM-dd HH:mm:ss,必须按年月日时分秒的顺序,中间分隔符不限制
 */
export function strToDate(dateStr) {         //dateStr:'2021-03-23 16:36:00'
    return strFormatToDate('yyyy-MM-dd HH:mm:ss', dateStr);
}
**
 * 把指定格式的字符串转换为日期对象yyyy-MM-dd HH:mm:ss
 *
 */
export function strFormatToDate(formatStr, dateStr) {
    let year = 0;
    let start = -1;
    let len = (dateStr|| '').length;
    if ((start = formatStr.indexOf('yyyy')) > -1 && start < len) {
        year = dateStr.substr(start, 4);
    }
    let month = 0;
    if ((start = formatStr.indexOf('MM')) > -1 && start < len) {
        month = parseInt(dateStr.substr(start, 2)) - 1;
    }
    let day = 0;
    if ((start = formatStr.indexOf('dd')) > -1 && start < len) {
        day = parseInt(dateStr.substr(start, 2));
    }
    let hour = 0;
    if (((start = formatStr.indexOf('HH')) > -1 || (start = formatStr.indexOf('hh')) > 1) && start < len) {
        hour = parseInt(dateStr.substr(start, 2));
    }
    let minute = 0;
    if ((start = formatStr.indexOf('mm')) > -1 && start < len) {
        minute = dateStr.substr(start, 2);
    }
    let second = 0;
    if ((start = formatStr.indexOf('ss')) > -1 && start < len) {
        second = dateStr.substr(start, 2);
    }
    return new Date(year, month, day, hour, minute, second);
}
<think>嗯,用户想了解如何在uni-app中使用缓存功能,包括设置、读取清除缓存的方法以及最佳实践。首先,我需要回顾一下uni-app的缓存机制。根据提供的引用内容,uni-app提供了同步异步两种缓存操作方法,比如uni.setStorageSyncuni.setStorage。用户可能需要知道这两种方法的区别使用场景。 首先,设置缓存。引用3提到uni.setStorage是一个异步接口,需要处理回调,而uni.setStorageSync是同步的,直接执行。我应该分别给出这两种方法的示例代码,比如如何在Vue的methods里调用它们,并说明何时使用同步或异步。比如,如果操作简单且不需要等待结果,可以用同步方法;如果需要处理成功或失败的情况,用异步更合适。 接下来是读取缓存。用户需要知道如何获取已存储的数据。同样,同步方法uni.getStorageSync异步方法uni.getStorage。这里要注意,读取异步方法时,需要在success回调里处理数据,否则可能拿到undefined。比如引用2中提到storage的读取是异步的,必须通过回调获取结果。 然后是清除缓存,包括删除单个键值对清空全部缓存。uni.removeStorageSyncuni.removeStorage,以及uni.clearStorageSyncuni.clearStorage。需要提醒用户注意清除全部缓存可能带来的影响,比如其他功能依赖的缓存也被删除,所以最好按需清除。 关于最佳实践,引用2提到缓存容量有限,需要合理选择存储策略。比如,对于频繁访问的数据使用localStorage,而敏感信息不应存储在缓存中。另外,引用3中的示例代码展示了同步方法的使用,包括存储、读取、删除清空,用户可能需要了解这些操作的顺序注意事项。 还需要考虑版本兼容性错误处理。比如,在异步操作中添加fail回调,处理可能出现的错误,如存储空间不足。此外,拦截器uni.addInterceptor可以用于全局处理缓存操作,引用2提到这点,可能是一个高级用法,用户如果有兴趣可以进一步探索。 最后,生成相关问题,帮助用户深入理解。比如同步异步的区别、处理大数据量的方法、缓存安全等。这些相关问题需要基于用户可能遇到的后续问题来设计,确保覆盖常见的使用场景潜在问题。</think>### 如何在 Uni-app 中使用缓存功能? #### 一、缓存操作方法 1. **设置缓存** - **同步方法**:直接写入本地缓存 ```javascript uni.setStorageSync('key', value); // 支持字符串、对象等可序列化数据[^3][^4] ``` - **异步方法**:通过回调处理结果 ```javascript uni.setStorage({ key: 'key', data: value, success: () => console.log('存储成功'), fail: (err) => console.error('存储失败', err) }); // 适用于需要错误处理的场景[^3] ``` 2. **读取缓存** - **同步读取**: ```javascript const data = uni.getStorageSync('key'); // 立即返回结果 ``` - **异步读取**: ```javascript uni.getStorage({ key: 'key', success: (res) => console.log('读取结果:', res.data) }); // 需通过回调获取结果[^2] ``` 3. **清除缓存** - **删除单个缓存**: ```javascript uni.removeStorageSync('key'); // 同步删除 uni.removeStorage({ key: 'key' }); // 异步删除[^3] ``` - **清空全部缓存**: ```javascript uni.clearStorageSync(); // 立即清空 uni.clearStorage(); // 异步清空 ``` #### 二、最佳实践 1. **数据格式选择** - 优先使用`JSON.stringify()`存储对象数据 - 避免存储敏感信息(如密码) 2. **容量控制** - 单个小程序缓存上限为 10MB - 定期清理过期数据(示例代码): ```javascript const EXPIRATION = 86400; // 24小时 function setWithExpiration(key, value) { const data = { value: value, timestamp: Date.now() }; uni.setStorageSync(key, data); } ``` 3. **性能优化** - 高频操作使用同步接口(如`setStorageSync`) - 大数据量操作建议使用异步接口防止阻塞 #### 三、代码示例 ```javascript // 完整缓存操作示例 export default { methods: { saveUserInfo(user) { uni.setStorageSync('user', JSON.stringify(user)); }, loadUserInfo() { const data = uni.getStorageSync('user'); return data ? JSON.parse(data) : null; }, clearAllCache() { uni.clearStorageSync(); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值