一、JS語(yǔ)法:
1、一個(gè) = 是賦值;兩個(gè) == 是弱等于判斷,不會(huì)去判斷類(lèi)型只要值一樣就會(huì)返回true;三個(gè) === 是強(qiáng)等于判斷,值和類(lèi)型必須都一致才會(huì)返回true;(移動(dòng)端同學(xué)轉(zhuǎn)前端的需注意一下,反正iOS里面沒(méi)有===)
2、let、const、var聲明使用:
微信小程序官方文檔示例都是var,但是同事給我安裝了ESLint插件,以及配置了些規(guī)范后到處飄紅,var是全局變量,如果只是個(gè)方法塊的臨時(shí)變量用let和const即可。let和const特性大同小異,唯一的區(qū)別是const定義的對(duì)象物理指針不可修改,但是對(duì)象屬性的值是可以增刪改查的。所以如果不需要修改對(duì)象,一般都用const而不用let。
3、ES6模塊與CommonJS模塊的差異:
查帖看了很多文章,暈暈乎乎的,暫且先只管導(dǎo)入導(dǎo)出的問(wèn)題吧,子類(lèi)化JS文件中導(dǎo)出的方法或者data 需用導(dǎo)入時(shí)一致。
微信小程序官方文檔里示例是CommonJS語(yǔ)法,CommonJS語(yǔ)法在加載頁(yè)才會(huì)require加載數(shù)據(jù),ES6語(yǔ)法在首頁(yè)就可以拿到所有加載的數(shù)據(jù),即使是在后面才import。
//CommonJS:
//導(dǎo)出方法
module.exports.postRequest = postRequest;
//導(dǎo)入方法
const common = require("./network.js");
common.postRequest();
// 導(dǎo)出數(shù)值data
module.exports = data;
//導(dǎo)入數(shù)值data
const data = require("./data.js");
//ES6:
//導(dǎo)出方法名
export default function(){
return ""
}
//導(dǎo)入方法
import myFunction from "./network.js"; //這里默認(rèn)導(dǎo)出不需要用{}
console.log(myFunction()); //默認(rèn)導(dǎo)出一個(gè)方法
// 導(dǎo)出數(shù)值data
export default data;
//導(dǎo)入數(shù)值data
import data from "./data.js";
console.log(data);
4、setData是異步的,不會(huì)立馬更新值,如果需要同步操作,需做回調(diào)處理。
const name = "lizzy";
this.setData(
{
name: name
},
() => {
//需要執(zhí)行的同步操作
}
);
5、this和that對(duì)象聲明,暫時(shí)我了解的是一般網(wǎng)絡(luò)請(qǐng)求回調(diào)、延時(shí)回調(diào)、定時(shí)器回調(diào)this會(huì)找不到,需在回調(diào)前聲明const that = this; 其他時(shí)候直接用this即可。
6、數(shù)組filter過(guò)濾篩選:
let exeData = .filter(function(item) {
return item.quesType.includes("5");
});
其中include是對(duì)字符串包含判斷,比indexof好使。
7、判空三目運(yùn)算可簡(jiǎn)寫(xiě)為:userName || "" 也就是如果userName存在并有值就顯示值,否則為空。
8、int與字符串類(lèi)型互轉(zhuǎn):
//int轉(zhuǎn)字符串
const num = 1;
const stringNum = String(num);
console.log(stringNum);
//字符串轉(zhuǎn)int
const stringNum = "1";
const intNum = parseInt(stringNum);
console.log(intNum);
9、wx.showToast()與wx.hideLoading()沖突的問(wèn)題:
在網(wǎng)絡(luò)請(qǐng)求的時(shí)候,toast與loading可能同時(shí)存在,所以需要hide,但是兩者都hide會(huì)出現(xiàn)wx.showLoading 應(yīng)與 wx.hideLoading 配對(duì)使用。wx.showLoading 和wx.showToast只能顯示一個(gè),但是使用wx.hideToast或wx.hideloading都可以關(guān)閉提示框。
解決方法:避開(kāi)在(同一層scope域) showToast前面使用wx.hideLoading(),因?yàn)閟howToast本身具備隱藏wx.showLoading()提示框的功能,如果使用wx.hideLoading(),后面的showToast就無(wú)法顯示了。