JavaScript ææè¨±å¤é³è¿°å¼ï¼ç¹å¥æ¯æµç¨æ§å¶çé³è¿°å¼ï¼ä½ å¯ä»¥ç¨éäºé³è¿°å¼ä¾å¢å ç¨å¼çäºåæ§ãéåç« ç¯å°ææ¦è¦ä»ç´¹é³è¿°å¼ã
JavaScript åèä¸ææ¯æ¬ç« æ´å¤éæ¼é³è¿°å¼çç´°ç¯ã å¨ Javascript ç¨å¼ç¢¼ä¸ï¼åèï¼;ï¼è¢«ç¨ä¾ééé³è¿°å¼ã
ä»»ä½ JavaScript éç®å¼ä¹æ¯ä¸åé³è¿°å¼ã æééç®å¼ç宿´è³è¨ï¼è«åé±éç®å¼èéç®åã
åå¡é³è¿°å¼æåºæ¬çé³è¿°å¼æ¯ãç¨æ¼å°é³è¿°å¼åå¡ãçãåå¡é³è¿°å¼ããç¨å¼åå¡è¢«ä»¥ä¸å°å¤§æ¬èéé¢éä¾ï¼
{ é³è¿°å¼ 1; é³è¿°å¼ 2; . . . é³è¿°å¼ n; }ç¯ä¾
åå¡é³è¿°å¼ç¶å¸¸èæµç¨æ§å¶é³è¿°å¼ï¼ä¾å¦ï¼if
ãfor
ãwhile
ï¼æé
使ç¨ã
å¨éè£ï¼{ x++; }
æ¯åå¡é³è¿°å¼ã
éè¦ï¼JavaScript å¨ ECMAScript2015 ï¼ç¬¬å çï¼ä»¥åççæ¬ä¸¦æ²æåå¡ç¯åçæ¦å¿µã å¨åå¡ä¸çè®æ¸ææç¯åæ¯å å«è©²åå¡çå½å¼æè æ¯å·è¡æªï¼ä¸¦ä¸å¨åå¡å¤ä¹å¯ä½¿ç¨å®åãæå¥è©±èªªï¼åå¡ä¸¦ä¸å®ç¾©äºç¯åãJavaScript ä¸ç"ç¨ç«"åå¡å°æç¢çè C å Java ä¸ä¸åçææãèä¾ä¾èªªï¼
var x = 1;
{
var x = 2;
}
console.log(x); // è¼¸åº 2
éè£è¼¸åºäº 2 æ¯å çºåå¡ä¸è®æ¸ var x
é³è¿°å¼ææèåå¡å¤ç var x
ç¸åçææç¯åãå¨ C æ Javaï¼ç¸åçç¨å¼ç¢¼å°æè¼¸åº 1ã
å¾ ECMAScript2015 çæ¬èµ·ï¼ ä½¿ç¨ let
å®ç¾©çè®æ¸ç¯åå°è¢«éå¶æ¼åå¡å
§ã
æ¢ä»¶é³è¿°å¼æ¯ä¸äºå¨æå®æ¢ä»¶ç²çä¸å°è¢«å·è¡çæä»¤ã JavaScript æ¯æ´å
©ç¨®æ¢ä»¶é³è¿°å¼ï¼ if...else
å switch
ã
if...else
é³è¿°å¼
if é³è¿°å¼å°å¨ãéè¼¯å¤æ·ç²çãä¸å·è¡æ¥ä¸ä¾çä¸åé³è¿°å¼
ã鏿æ§ç else
é³è¿°å¼å°æå¨ãéè¼¯å¤æ·ç²å¦ãæè¢«å·è¡ã if
é³è¿°å¼çç¨æ³çèµ·ä¾å¦ä¸ï¼
if (æå®æ¢ä»¶) { é³è¿°å¼ 1; } else { é³è¿°å¼ 2; }
æå®æ¢ä»¶å¯ä»¥æ¯ä»»ä½æåå³ true æ false çéç®å¼ãåè¦ Boolean ä¾é²ä¸æ¥çè§£åªäºéç®å¼æåå³ true
å false
ãå妿宿¢ä»¶ç² true
ï¼é³è¿°å¼ 1 æè¢«å·è¡ï¼å¦åï¼é³è¿°å¼ 2 æè¢«å·è¡ãé³è¿°å¼ 1 åé³è¿°å¼ 2 å¯ä»¥æ¯ä»»ä½é³è¿°å¼ï¼å
å«å·¢ç if
é³è¿°å¼ã
ä½ ä¹å¯ä»¥èç± else if
ä¾ä½¿ç¨è¤åçé³è¿°å¼ä¾æ¸¬è©¦å¤ç¨®ä¸åçæ¢ä»¶ï¼å¦ä¸ï¼
if (æå®æ¢ä»¶1) { é³è¿°å¼ 1; } else if (æå®æ¢ä»¶ 2) { é³è¿°å¼ 2; } else if (æå®æ¢ä»¶ n) { é³è¿°å¼ n; } else { æå¾é³è¿°å¼; }
å¨å¤åæ¢ä»¶ä¸ï¼åªæç¬¬ä¸åæ¢ä»¶ç² true çé³è¿°å¼æè¢«å·è¡ãè¥è¦å·è¡å¤åé³è¿°å¼ï¼å¯ä»¥å°é³è¿°å¼å
å¨åä¸åç¨å¼åå¡ä¸ï¼{ ... }
ï¼ã é常ä¾èªªï¼ä½¿ç¨åå¡é³è¿°å¼æ¯å¾å¥½çç¿æ
£ï¼å°¤å
¶å¨ä½¿ç¨å·¢ç if çæå:
if (æå®æ¢ä»¶) { é³è¿°å¼_1_å·è¡_ç¶_æå®æ¢ä»¶_ç²_ç; é³è¿°å¼_2_å·è¡_ç¶_æå®æ¢ä»¶_ç²_ç; } else { é³è¿°å¼_3_å·è¡_ç¶_æå®æ¢ä»¶_ç²_å¦; é³è¿°å¼_4_å·è¡_ç¶_æå®æ¢ä»¶_ç²_å¦; }
建è°ä¸è¦å¨ä»¥è³¦å¼ä½ç²æ¢ä»¶éç®å¼ï¼å çº"賦å¼"常常被å"çæ¼"ææ··ã ä¾å¦ï¼ ä¸è¦å¯«åºå¦ä¸é¢çç¨å¼ç¢¼:
if (x = y) {
/* é³è¿°å¼ */
}
å¦æä½ ççéè¦ä»¥è³¦å¼ä½ç²æ¢ä»¶éç®å¼ï¼ä¸ç¨®å¸¸è¦çæ¹å¼æ¯é¡å¤å¨è³¦å¼å¼å¤é¢å ä¸ä¸çµæ¬èãä¾å¦ï¼
if ((x = y)) {
/* é³è¿°å¼ */
}
ç²"å¦"çå¼
ä¸åçå¼æè¢«çä½ falseï¼ä¹ç¨±çº Falsy å¼ï¼
false
undefined
null
0
NaN
""
)å
¶ä»ææçå¼ï¼å
嫿æç©ä»¶ï¼ç¶è¢«ä½çºæ¢ä»¶é³è¿°å¼é½æè¢«è¦çº true
ã
ä¸è¦æ"叿çåå¼"å"叿ç©ä»¶ççåå¼"弿··äºã ä¾å¦:
var b = new Boolean(false);
if (b) // éææ¯ True
if (b == true) // éææ¯ false
ç¯ä¾
å¨ä¸é¢çç¯ä¾ä¸ï¼å½å¼ checkData
åå³ true
ç¶ Text
ç©ä»¶çé·åº¦ç²ä¸ï¼å¦åï¼é¡¯ç¤ºåº alert 並åå³ false
ã
function checkData() {
if (document.form1.threeChar.value.length == 3) {
return true;
} else {
alert(
"è«è¼¸å
¥æ°å¥½ä¸ååå
. " +
document.form1.threeChar.value +
" is not valid.",
);
return false;
}
}
switch
é³è¿°å¼
switch
é³è¿°å¼å
許ç¨å¼ä¾éç®å¼çä¸åå¼ä¾é¸æä¸åæ¨ç±¤ã åå¦éç®å¼åæ¨ç±¤å¹é
ï¼ç¨å¼æå·è¡æ¨ç±¤å°æçé³è¿°å¼ãç¯ä¾å¦ä¸:
switch (éç®å¼) { case æ¨ç±¤ 1: é³è¿°å¼ 1 [break;] case æ¨ç±¤ 2: é³è¿°å¼ 2 [break;] ... default: é³è¿°å¼ [break;] }
ç¨åºé¦å
å°æ¾ä¸åæ¨ç±¤èéç®å¼çå¼å¹é
ç case
åå¥ï¼ç¶å¾å°æ§å¶æ¬è½ç§»çµ¦è©²åå¥ï¼å·è¡èå
¶ç¸éçé³è¿°å¼ã å¦ææ²ææ¾å°å¹é
çæ¨ç±¤ï¼ç¨åºå°æ¥æ¾ default
åå¥ï¼é¸ææ§ï¼ï¼å¦ææ¾å°ï¼åå°æ§å¶æ¬è½ç§»å°è©²åå¥ï¼å·è¡éè¯çé³è¿°å¼ã å¦ææ²ææ¾å° default
åå¥ï¼ç¨åºç¹¼çºå¨ switch
çµæå¾çé³è¿°å¼å·è¡ã æç
§æ
£ä¾ï¼é»èªå奿¯æå¾ä¸ååå¥ï¼ä½ä¸¦ä¸ç¡¬æ§è¦å®ã
èæ¯å case
åå¥ç¸éè¯ç break
é³è¿°å¼ï¼é¸ææ§ï¼ç¢ºä¿ç¨åºå¨ç¼ç¾å¹é
çé³è¿°å¼ä¹å¾éåº switch
ï¼ä¸¦å¨ switch
å¾çé³è¿°å¼ä¸ç¹¼çºå·è¡ã 妿çç¥ break
ï¼ç¨åºå°ç¹¼çºå¨ switch
é³è¿°å¼ä¸çä¸ä¸åé³è¿°å¼å·è¡ã
å¨ä¸é¢ç¯ä¾ä¸ï¼å¦æè®æ¸ fruittype
çºãBananasãï¼ç¨åºå°èãBananasãå¹é
並å·è¡ç¸éé³è¿°å¼ã ç¶éå° break
æï¼ç¨åºé¢é switch
並å·è¡ switch
å¾çé³è¿°å¼ã 妿çç¥ break
ï¼ä¹å°å·è¡ case ãCherriesãçé³è¿°å¼ã
switch (fruittype) {
case "Oranges":
console.log("Oranges are $0.59 a pound.");
break;
case "Apples":
console.log("Apples are $0.32 a pound.");
break;
case "Bananas":
console.log("Bananas are $0.48 a pound.");
break;
case "Cherries":
console.log("Cherries are $3.00 a pound.");
break;
case "Mangoes":
console.log("Mangoes are $0.56 a pound.");
break;
case "Papayas":
console.log("Mangoes and papayas are $2.79 a pound.");
break;
default:
console.log("Sorry, we are out of " + fruittype + ".");
}
console.log("Is there anything else you'd like?");
ä¾å¤èçé³è¿°å¼
ä½ å¯ä»¥ç¨ä»¥ throw
é³è¿°å¼ä¸åºä¾å¤ï¼ä¸¦ä»¥ try...catch
é³è¿°å¼èçä¹ã
ä»»ä½ç©ä»¶ï¼objectï¼é½å¯ä»¥å¨ JavaScript ä¸è¢«æåºã ç¶èï¼ä¸¦éæææåºçç©ä»¶é½ç¸åã éç¶å°æ¸åæå串ä½çºé¯èª¤ç©ä»¶ä½¿ç¨æ¯ç¸ç¶å¸¸è¦çï¼ä½ä½¿ç¨çºæ¤ç®çå°éåµé çä¸ç¨®ä¾å¤ç©ä»¶é¡åéå¸¸æ´ææ:
throw
é³è¿°å¼
ä½¿ç¨ throw
é³è¿°å¼æåºä¾å¤ãç¶æåºä¾å¤æï¼ä½ è¦æå®å
å«å¨è¦æåºç©ä»¶ä¸çå¼:
throw expression;
ä½ å¯ä»¥æåºä»»ä½éç®å¼ï¼èä¸å å æ¯ç¹å®é¡åçéç®å¼ã以ä¸çç¨å¼ç¢¼ææåºä¸äºä¸åé¡åçä¾å¤ï¼
throw "Error2"; // å串形æ
throw 42; // æ¸åå½¢æ
throw true; // True/False
throw {
toString: function () {
return "ææ¯ç©ä»¶!";
},
};
åè¨»ï¼ ä½ å¯ä»¥å¨æåºä¾å¤ææå®ç©ä»¶ãç¶å¾ï¼å¯ä»¥å¨ catch åå¡ä¸å¼ç¨å°è±¡ç屬æ§ã
// åµå»ºé¡åç² UserException çç©ä»¶
function UserException(message) {
this.message = message;
this.name = "UserException";
}
// è®ä¾å¤è½æææ´é½çå串ç¶å®è¢«ç¶ä½åä¸²ä½¿ç¨æ
// ï¼èä¾ä¾èªª:æ¼ error consoleï¼
UserException.prototype.toString = function () {
return this.name + ': "' + this.message + '"';
};
// åµå»ºä¸åç©ä»¶ç實ä¾ä¸¦ä¸åºå®
throw new UserException("Value too high");
try...catch
é³è¿°å¼
try...catch
é³è¿°å¼æ¨è¨äºä¸çµè¦å試çé³è¿°å¼ï¼ä¸¦å¨æåºä¾å¤ææå®ä¸åæå¤åé¿æã 妿ä¾å¤è¢«æåºï¼try...catch
é³è¿°å¼æç²å®ã
try...catch
é³è¿°å¼å
æ¬ä¸å try
åå¡ï¼å®å
å«ä¸åæå¤åé³è¿°å¼ï¼é¶åæå¤å catch
åå¡ï¼å
å«å¨ try
åå¡ä¸æåºä¾å¤æè©²åä»éº¼çé³è¿°å¼ã ä¹å°±æ¯èªªï¼ä½ 叿 try
å塿åï¼å¦æå®ä¸æåï¼ä½ 叿æ§å¶æ¬å³é給 catch
åå¡ã 妿 try
åå¡å
§çä»»ä½é³è¿°å¼ï¼æå¨ try
åå¡å
§èª¿ç¨ç彿¸ä¸ï¼æåºä¾å¤ï¼åæ§å¶ç«å³åæå° catch
åå¡ã å¦æå¨ try
åå¡ä¸æ²ææåºä¾å¤ï¼åè·³é catch
åå¡ã finally
åå¡å¨ try
å catch
åå¡å·è¡å¾å·è¡ï¼ä½å¨ try...catch
é³è¿°å¼ä¹å¾çé³è¿°å¼ä¹åå·è¡ã
以ä¸çç¯ä¾ä½¿ç¨ try...catch
é³è¿°å¼ã該ç¯ä¾èª¿ç¨åºæ¼å³éçµ¦å½æ¸çå¼ä¸¦å¾é£å䏿ª¢ç´¢æä»½å稱ç彿¸ã妿å¼ä¸å°ææ¼æä»½æ¸ï¼1-12ï¼ï¼åææåºä¸åä¾å¤ï¼å
¶å¼çº "InvalidMonthNo"ï¼ä¸¦ä¸ catch
åå¡ä¸çé³è¿°å¼å° monthName
è®æ¸è¨ç½®çº unknown
ã
function getMonthName(mo) {
mo = mo - 1; // Adjust month number for array index (1 = Jan, 12 = Dec)
var months = [
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
"Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec",
];
if (months[mo]) {
return months[mo];
} else {
throw "InvalidMonthNo"; //throw ééµåå¨éè£è¢«ä½¿ç¨
}
}
try {
// statements to try
monthName = getMonthName(myMonth); // å½å¼å¯ä»¥ä¸åºä¾å¤
} catch (e) {
monthName = "unknown";
logMyErrors(e); // å°ä¾å¤å³è³ä¾å¤èçæ©å¶
}
catch
åå¡
ä½ å¯ä»¥ä½¿ç¨ catch
åå¡ä¾èç try
åå¡å¯è½ä¸åºçä¾å¤ã
catch (catchID) { é³è¿°å¼ }
catch
å塿å®ç¨ä¾ä¿å throw
é³è¿°å¼æä¸åºçå¼çæ¨è符ï¼åé¢èªæ³ä¸ç catchID
ï¼ ä½ å¯ä»¥ä½¿ç¨æ¤æ¨è符ç²åæé被æåºçä¾å¤çä¿¡æ¯ã JavaScript å¨é²å
¥catch
å塿åµå»ºæ¤æ¨è符; æ¨è符å
æçº catch
åå¡çæçºæéï¼å¨ catch
åå¡å®æå·è¡å¾ï¼æ¨è符ä¸åå¯ç¨ã
ä¾å¦ï¼ä¸åçç¨å¼ç¢¼ä¸ä¸åºäºä¸åä¾å¤ï¼ç¶ä¾å¤ç¼çå¾ï¼æ§å¶æ¬è¢«è½äº¤çµ¦ catch
åå¡ã
try {
throw "myException"; // ç¢çä¾å¤
} catch (e) {
// ç¨æ¼èçä¾å¤çé³è¿°å¼
logMyErrors(e); // å°ä¾å¤ç©ä»¶å³çµ¦ error handler
}
finally
åå¡
finally
åå¡ä¸å
å«å¨ try
å catch
åå¡å·è¡ä¹å¾ä½å¨ try...catch
é³è¿°å¼ä¹å¾çé³è¿°å¼ä¹å å·è¡çé³è¿°å¼ã ç¡è«æ¯å¦æåºä¾å¤ï¼finally
åå¡é½æå·è¡ã 妿æåºä¾å¤ï¼åå³ä½¿æ²æ catch
åå¡èçä¾å¤ï¼finally
åå¡ä¸çé³è¿°å¼ä¹æå·è¡ã
ä½ å¯ä»¥ä½¿ç¨ finally
åå¡ä¾ä½¿è
³æ¬å¨ç¼çä¾å¤ææ£å¸¸å°çµæãä¾å¦ï¼ä½ å¯è½éè¦éæ¾è
³æ¬ä¸ç¶å®çè³æºã å¨ä»¥ä¸ç¤ºä¾ä¸ï¼æéä¸åæä»¶ï¼ç¶å¾å·è¡ä½¿ç¨è©²æä»¶çé³è¿°å¼ï¼ä¼ºæå¨ç«¯ JavaScript å
è¨±ä½ è¨ªåæä»¶ï¼ã 妿卿éæä»¶ææåºä¾å¤ï¼finally
å塿å¨è
³æ¬çµæä¹åééæä»¶ã
openMyFile();
try {
writeMyFile(theData); // å¯è½ç¢çä¾å¤
} catch (e) {
handleError(e); // èçå¯è½ç¼ççä¾å¤
} finally {
closeMyFile(); // 總æ¯å¨ try çµæå¾ééæªæ¡
}
妿 finally
å塿è¿åå¼ï¼é£éº¼è©²å¼å°æçºæ´å try-catch-finally
éç¨çè¿åå¼ï¼èæ¨æ£ try
å catch
åå¡ä¸çä»»ä½è¿åé³è¿°å¼ï¼
function f() {
try {
console.log(0);
throw "bogus";
} catch (e) {
console.log(1);
return true; // éååå³æè¢«æ±ç½®
// ç´å° finally åå¡çµæ
console.log(2); // 䏿å°ééè£
} finally {
console.log(3);
return false; // è¦å¯«å
åç "return"
console.log(4); // 䏿å°ééè£
}
// "return false" å¨éè£è¢«å·è¡
console.log(5); // 䏿å°ééè£
}
f(); // console 0, 1, 3; æåå³false
finally
åå¡è¦å¯«è¿åå¼ä¹é©ç¨æ¼å¨ catch
åå¡ä¸æåºæéæ°æåºçä¾å¤ï¼å³ä¾¿å¨catch
ä¸å次ä¸åºä¾å¤ï¼catch
æå±¬ç finally
åå¡éæ¯æè¢«å·è¡ï¼ï¼
function f() {
try {
throw "bogus";
} catch (e) {
console.log('caught inner "bogus"');
throw e; // æ¤èç throw é³è¿°å¼å°è¢«æ±ç½®å°
// finally åå¡çµæ
} finally {
return false; // è¦å¯«å
åç"throw"
}
// "return false" 卿¤è¢«å·è¡
}
try {
f();
} catch (e) {
// éè£æ°¸é ä¸å¯è½å°éå çºå¨ f å½å¼ä¸ catch ç throw
// 被 finally ä¸ç return è¦å¯«äº
console.log('caught outer "bogus"');
}
// è¼¸åº -> caught inner "bogus"
å·¢ç try...catch é³è¿°å¼
ä½ å¯ä»¥ä½¿ç¨ä¸åæå¤åç try...catch
é³è¿°å¼ã åå¦ä¸åå
§å±¤çtry...catch
é³è¿°å¼ä¸å
·æ catch
åå¡ï¼ å®å°å¿
é è¦æ finally
åå¡èåå°éç try...catch
é³è¿°å¼ä¾æª¢æ¸¬æ¯å¦æç¬¦åçä¾å¤ã
Error
ç©ä»¶
æ ¹æé¯èª¤çé¡åï¼ä½ å¯ä»¥ä½¿ç¨ "name" å "message" 屬æ§ä¾ç²åæ´ç²¾ç¢ºçè³è¨ã"name" æä¾äºé¯èª¤æå±¬çé¡å¥ï¼classï¼ï¼ä¾å¦ï¼"DOMException" æ "Error"ï¼ï¼è "message" é常æä¾èç±å°é¯èª¤ç©ä»¶è½æçºå串æç²å¾çæ´ç°¡æ½çè³è¨ãåè¦å·¢ç try åå¡ä½æ¼ try...catch
åèè³æé é¢ã
åå¦ä½ è¦ä¸åºèªå®ç¾©çä¾å¤ï¼ çºäºæ¹ä¾¿ä½¿ç¨éäºå±¬æ§ï¼ä¾å¦ï¼å¦æä½ ç catch
åå¡ä¸¦ä¸è¦ååä½ èªå·±çä¾å¤å系統çï¼ï¼ä½ å¯ä»¥ä½¿ç¨ Error
æ§é åãèä¾ä¾èªªï¼
function doSomethingErrorProne () {
if (ourCodeMakesAMistake()) {
throw (new Error('The message'));
} else {
doSomethingToGetAJavascriptError();
}
}
....
try {
doSomethingErrorProne();
}
catch (e) {
console.log(e.name); // ç´é 'Error'
console.log(e.message); // ç´é 'The message' æè
å
¶ä» JavaScript ä¾å¤çè³è¨)
}
Promises 容å¨
å¾ ECMAScript2015 èµ·ï¼JavaScript æ¯æ´ Promise
ç©ä»¶ï¼å
è¨±ä½ æ§å¶å»¶é²åç°æ¥æä½çæµç¨ã
Promise
æä»¥ä¸å¹¾ç¨®çæ
:
éè£æåç°¡å®çç¯ä¾ï¼ä½¿ç¨äº Promise
ç©ä»¶èå XMLHttpRequest
ä¾è¼å
¥ MDN GitHub promise-test repository ä¸çä¸å¼µåæªãä½ ä¹å¯ä»¥è§ççµæã æ¯ä¸æ¥é½æè¨»è§£ä¾è®ä½ æ
¢æ
¢çè§£ Promise ç©ä»¶èå XHR æ¶æ§ã ä¸é¢ççæ¬æ²æè¨»è§£ï¼ä½èç±è§å¯ Promise
ç©ä»¶çè®åä½ æè¨±å¯ä»¥å° promise ç©ä»¶ææäºè§£:
function imgLoad(url) {
return new Promise(function (resolve, reject) {
var request = new XMLHttpRequest();
request.open("GET", url);
request.responseType = "blob";
request.onload = function () {
if (request.status === 200) {
resolve(request.response);
} else {
reject(
Error(
"Image didn't load successfully; error code:" + request.statusText,
),
);
}
};
request.onerror = function () {
reject(Error("There was a network error."));
};
request.send();
});
}
以ç²å¾æ´å¤è³è¨ï¼æ¥ç Promise
åç
§é é¢ï¼ä»¥åä½¿ç¨ Promises æå¸ã
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4