说明:NaN 表示非法,如果把 NaN 与任何值(包括其自身)相比得到的结果均是 false,所以要判断某个值是否是 NaN,不能使用 == 或 === 运算符。
提示:isNaN() 函数通常用于检测 parseFloat() 和 parseInt() 的结果,以判断它们表示的是否是合法的数字。当然也可以用 isNaN() 函数来检测算数错误,比如用 0 作除数的情况。
说明:null==undefined
提示:一般不那么区分就使用这个足够。
让一个对象一开始设为null,通过判断是否为null即可判断
if(options){ //存在 }else{ //不存在 }即可
一、使用来自不同页面的函数函数写在util.js页面
function formatTime(date) {
var year = date.getFullYear()
var month = date.getMonth() + 1
var day = date.getDate()
var hour = date.getHours()
var minute = date.getMinutes()
var second = date.getSeconds()
return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
}
function formatNumber(n) {
n = n.toString()
return n[1] ? n : '0' + n
}
module.exports = {
formatTime: formatTime,
}
使用函数
图片描述
图片描述
二、使用相同页面的函数
get_productInformation: function () {
。。。。
},
getZones:function(){
this.get_productInformation
},
三、使用app.js内定义的函数
app.js代码
//app.js
App({
onLaunch: function() {
//调用API从本地缓存中获取数据
var logs = wx.getStorageSync('logs') || []
logs.unshift(Date.now())
wx.setStorageSync('logs', logs)
},
get_a_test:function(){
console.log('this is a test')
},
getUserInfo: function(cb) {
var that = this
if (this.globalData.userInfo) {
typeof cb == "function" &&cb(this.globalData.userInfo)
} else {
//调用登录接口
wx.getUserInfo({
withCredentials: false,
success: function(res) {
that.globalData.userInfo = res.userInfo
typeof cb == "function" &&cb(that.globalData.userInfo)
}
})
}
},
globalData: {
userInfo: null,
college_change:false
}
})
在其他页面中使用
图片描述
针对小程序的异步
因为懒得去配置async 和await的环境了,wx.getStorageSync是同步的就
直接了在这个基础上了一个重入锁的js来实现同步
/***本类主要用来实现同步*/
const lockerKey = "wxlocker"
var lockerContainer={}
/**
* 加锁函数
* 参数:锁名
*
*/
function lock(lockName){
var obj= wx.getStorageSync(lockerKey)
console.log(111)
console.log(obj)
if (typeof obj === "undefined" || obj==null||obj==''){
lockerContainer.lockName = 1
wx.setStorageSync(lockerKey, lockerContainer)
}else{
lockerContainer = obj
if (typeof lockerContainer.lockName !== "undefined" &&lockerContainer.lockName != null &&lockerContainer.lockName != ''){
lockerContainer.lockName = lockerContainer.lockName +1
}else{
lockerContainer.lockName = 1
}
//更新锁
wx.setStorageSync(lockerKey, lockerContainer)
}
}
/**
* 解锁函数
* 参数:锁名
*
*/
function unlock(lockName){
var obj = wx.getStorageSync(lockerKey)
console.log(222)
console.log(obj)
if (typeof obj === "undefined" || obj == null || obj == '') {//没有锁过
return
} else {
lockerContainer = obj
if (typeof lockerContainer.lockName !== "undefined" &&lockerContainer.lockName != null &&lockerContainer.lockName != '') {
if (lockerContainer.lockName <=0){
lockerContainer.lockName=0
return
}else{
lockerContainer.lockName = lockerContainer.lockName - 1
}
} else {
return
}
//更新锁
wx.setStorageSync(lockerKey, lockerContainer)
obj = wx.getStorageSync(lockerKey)
console.log(obj)
}
}
/**
* 是否被锁函数
* 参数:锁名
* 返回值:boolean
*/
function isLockedBy(lockName){
var obj = wx.getStorageSync(lockerKey)
if (typeof obj === "undefined" || obj == null || obj == '') {//没有锁过
return false
} else {
lockerContainer = obj
if (typeof lockerContainer.lockName !== "undefined" &&lockerContainer.lockName != null &&lockerContainer.lockName != '') {
if (lockerContainer.lockName >0) {
return true
} else {
return false
}
} else {
return false
}
}
}
/**
* 等待函数(等待100*millseconds后自动解除)
* 参数:锁名,间隔毫秒,等待解锁完成后的回调函数
*
*/
function wait(lockName, millseconds,callback){
//100次监控后清空锁
var expireTime = 0
var timer =setInterval(function () {
console.log("wait " + millseconds)
if (!isLockedBy(lockName)){
clearInterval(timer)
callback()
}else{//被锁住了
expireTime++
if (expireTime >100) {
lockerContainer.lockName=null
//清空锁
wx.setStorageSync(lockerKey, lockerContainer)
clearInterval(timer)
}
}
}, millseconds)
}
module.exports = {
wait: wait,
unlock: unlock,
lock: lock
}
用法,加锁多少次就要解锁多少次
lock("mylock")
lock("mylock")
unlock("mylock")
unlock("mylock")
wait("mylock",1000,callback)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)