JavaScriptã®çå笊(?)æ§æãŸãšãïŒ3ã€ã®äœ¿ãæ¹ãå®å šãã¹ã¿ãŒ
JavaScriptã®çå笊(?)ã®äœ¿ãæ¹ãç·ãŸãšããäžé æŒç®åããªãã·ã§ãã«ãã§ã€ãã³ã°ãnullåäœæŒç®åã®æŠå¿µãšå®åäŸãéããŠãã³ãŒããç°¡æœãã€å®å šã«ããŸãããã
JavaScriptã§ã³ãŒããæžããŠãããšããã¡ãã¡ã«ç»å Žããçå笊(?)ã®ããã§éŠãããããçµéšãçããäžåºŠã¯ããã®ã§ã¯ãªãã§ãããããifæã«äŒŒãŠããããã§ãããããªããžã§ã¯ãã®ããããã£ã«ãã£ã€ããŠããããæŒç®åã®éã«çªç¶çŸãããããŸãããã
ãããã®çå笊ã¯ãå®ã¯JavaScriptã®ã³ãŒããããç°¡æœã§ãšã¬ã¬ã³ãã«ããŠããããéåžžã«äŸ¿å©ãªææ³çè£ çœ®ã§ããç¹ã«å®åã§ã¯ãå埩çãªã³ãŒããæžãããäŸå€çãªç¶æ³ã广çã«åŠçããããã«æ¬åœã«ãã䜿ãããŸãã
ä»åã®èšäºã§ã¯ãJavaScriptéçºè
ãªãå¿
ãç¥ã£ãŠããã¹ãçå笊(?)ã®3ã€ã®çšæ³ãäžé
æŒç®åããªãã·ã§ãã«ãã§ã€ãã³ã°ããããŠnullåäœæŒç®åã«ã€ããŠè©³ããèŠãŠãããŸããåæ§æããªãå¿
èŠãªã®ãããããŠå®éã®ã³ãŒãã§ã©ã®ããã«æŽ»çšã§ããã®ãããæç¢ºãªäŸãšãšãã«èª¬æããŸãããã®èšäºãæåŸãŸã§èªãã°ãããçå笊ãæããããšãªããèªç±èªåšã«æŽ»çšã§ããèªåãçºèŠã§ããã¯ãã§ãïŒ
1. äžé
æŒç®å (Ternary Operator): æ¡ä»¶ ? å€1 : å€2
äžé
æŒç®åã¯ãif...elseæãäžè¡ã«ççž®ããŠãããæãåºæ¬çãªçåç¬Šã®æ§æã§ãããã®åã®éãã3ã€ã®ãªãã©ã³ãïŒæ¡ä»¶ãçã®å Žåã®å€ãåœã®å Žåã®å€ïŒãå¿
èŠãšããŸãã
- æ§æ:
æ¡ä»¶ ? çã®å Žåã®åŒ : åœã®å Žåã®åŒ
if...elseæãšæ¯èŒããŠã¿ããšããã®åœ¹å²ãæç¢ºã«ãªããŸãã
// if...elseæã䜿çš
let isAdult;
const age = 20;
if (age > 18) {
isAdult = true;
} else {
isAdult = false;
}
console.log(isAdult); // true
// äžé
æŒç®åã䜿çš
const isAdultTernary = age > 18 ? true : false;
console.log(isAdultTernary); // true
ã³ãŒãããã£ãšç°¡æœã«ãªããŸããããäžé æŒç®åã¯ããã®ããã«æ¡ä»¶ã«å¿ããŠç°ãªãå€ãæ°ã«å²ãåœãŠãéã«éåžžã«åœ¹ç«ã¡ãŸãã
äžé æŒç®åã®ã¡ãªãã
- ç°¡æœã:
if...elseãããã¯ãè€æ°è¡æžãå¿ èŠãªããäžè¡ã§è¡šçŸã§ãããããã³ãŒãã®å¯èªæ§ãé«ããããšãã§ããŸãã - åŒ: äžé æŒç®åã¯å€ãè¿ããåŒãã§ããããã倿°ã®å²ãåœãŠä»¥å€ã«ãã颿°ã®åŒæ°ãä»ã®åŒã®äžã«çŽæ¥äœ¿çšããããšãã§ããŸãã
ãã¹ããå¯èœã§ãïŒ
äžé
æŒç®åãè€æ°é£çµããŠãelse ifãšäŒŒãæ§æãäœãããšãã§ããŸãã
const age = 15;
const message = age < 8 ? 'åäŸã§ã' :
age < 18 ? 'éå°å¹Žã§ã' :
'æäººã§ã';
console.log(message); // 'éå°å¹Žã§ã'
ãã ãããã¹ããæ·±ããªãããããšããã£ãŠå¯èªæ§ãæãªãå¯èœæ§ãããã®ã§ã2ã3åçšåºŠã®æ¡ä»¶ã§ã®ã¿äœ¿çšããããšããå§ãããŸãããã以äžã«è€éã«ãªãå Žåã¯ãif...else ifæãswitchæã®æ¹ãè¯ãéžæãããããŸããã
2. ãªãã·ã§ãã«ãã§ã€ãã³ã° (Optional Chaining): ãªããžã§ã¯ã?.ããããã£
ãªãã·ã§ãã«ãã§ã€ãã³ã°(?.)ã¯ãES2020(ES11)ã§å°å
¥ãããæ¯èŒçæ°ããæ§æã§ãå®åã§æ¬åœã«æçšãããŠããæ©èœã®äžã€ã§ãããã®æ©èœã¯ããªããžã§ã¯ãã®ããããã£ã«ã¢ã¯ã»ã¹ããéããã®ãªããžã§ã¯ãããã®äžäœã®ããããã£ãnullãŸãã¯undefinedã®å Žåã«ãšã©ãŒãçºçããã代ããã«undefinedãè¿ããŠãããŸãã
äŸãã°ããµãŒããŒãããŠãŒã¶ãŒæ å ±ãåãåã£ãŠãããã£ãŒã«åçã衚瀺ããå¿ èŠãããç¶æ³ãèããŠã¿ãŸãããã
const user = {
name: "ãžã§ã€",
// profileãªããžã§ã¯ãããªãå Žåããã
};
// ãªãã·ã§ãã«ãã§ã€ãã³ã°ããªãå Žå
// const profileImage = user.profile.image; // TypeError: Cannot read properties of undefined (reading 'image')
äžèšã®ã³ãŒãã§ã¯ãuserãªããžã§ã¯ãã«ã¯profileããããã£ããªããããuser.profileã¯undefinedãšãªããundefinedããimageããããã£ãæ¢ãããšããããTypeErrorãçºçããŸãããã®ãããªãšã©ãŒã¯ã¢ããªã±ãŒã·ã§ã³ã忢ãããå¯èœæ§ããããŸãã
以åã¯ããã®ãããªãšã©ãŒãé²ãããã«ifæã&&æŒç®åã䜿çšããŠããŸããã
// 1. ifæã§ãã§ãã¯
let profileImage;
if (user && user.profile) {
profileImage = user.profile.image;
}
// 2. &&æŒç®åã§ãã§ãã¯
const profileImageAnd = user && user.profile && user.profile.image;
ãããããªãã·ã§ãã«ãã§ã€ãã³ã°ã䜿ãã°ããã®ã³ãŒããéæ³ã®ããã«ã·ã³ãã«ã«ãªããŸãã
const user = {
name: "ãžã§ã€",
};
const profileImage = user.profile?.image;
console.log(profileImage); // undefined (ãšã©ãŒçºçãªã)
user.profileãundefinedãªã®ã§ã?.æŒç®åã¯å³åº§ã«è©äŸ¡ã忢ããundefinedãè¿ããŸãããããã§ã©ã³ã¿ã€ã ãšã©ãŒãªãã«å®å
šã«å€ãåŠçã§ããããã«ãªã£ãã®ã§ãïŒãªããžã§ã¯ãã®ããããã£ã ãã§ãªããé
åã®èŠçŽ (arr?.[index])ã颿°ã®åŒã³åºã(func?.())ã«ã䜿çšã§ããéåžžã«æŽ»çšåºŠãé«ãã§ãã
3. nullåäœæŒç®å (Nullish Coalescing): å€1 ?? å€2
nullåäœæŒç®å(??)ãæ¥æ¬èªã§ã¯ãnullish coalescing operatorããšåŒã°ãããã®æ§æãããªãã·ã§ãã«ãã§ã€ãã³ã°ãšå
±ã«ES2020ã§å°å
¥ãããŸããããã®æŒç®åã¯ãå·ŠåŽã®ãªãã©ã³ãã nullãŸãã¯undefined ã®å Žåã«ã®ã¿å³åŽã®ãªãã©ã³ããè¿ãããã以å€ã®å Žåã¯å·ŠåŽã®ãªãã©ã³ãããã®ãŸãŸè¿ããŸãã
ããã©ã«ãå€ãèšå®ããéã«éåžžã«äŸ¿å©ã§ããã䜿ãããŠããè«çORæŒç®å(||)ã®æ¬ ç¹ãè£å®ããŠãããŸãã
||æŒç®åãšã®éã
||æŒç®åã¯ãå·ŠåŽã®ãªãã©ã³ããâfalsyâãªå€ã®å Žåã«å³åŽã®å€ãè¿ããŸããJavaScriptã«ãããfalsyãªå€ã«ã¯ãnullãundefinedã ãã§ãªãã0ã""(空æåå)ãfalseãNaNãå«ãŸããŸãã
ãã®ãããæå³ããªããã°ãçºçããããšããããŸããäŸãã°ããŠãŒã¶ãŒãèšå®ããå€ã0ã空æååã§ããããããæå¹ãªå€ãšããŠæ±ãããå Žåã«||ã䜿ããšåé¡ã«ãªããŸãã
let height = 0;
console.log(height || 100); // 100
// heightã0 (falsy) ãªã®ã§100ãåºåããããæå³ããåäœã§ã¯ãªãå¯èœæ§ãããã
ãã®ãããªç¶æ³ã§ãnullåäœæŒç®å(??)ãèŒããæŸã¡ãŸãã??ã¯nullãšundefinedã®ã¿ããã§ãã¯ããããã§ãã
let height = 0;
let text = "";
console.log(height ?? 100); // 0 (heightã¯nullã§ãundefinedã§ããªãã®ã§ããã®ãŸãŸ0ãè¿ã)
console.log(text ?? "ããã©ã«ãå€"); // "" (textã¯nullã§ãundefinedã§ããªãã®ã§ããã®ãŸãŸç©ºæååãè¿ã)
let missingValue = null;
console.log(missingValue ?? "ããã©ã«ãå€"); // "ããã©ã«ãå€"
ãã®ããã«??ã䜿ãã°ã0ã""ã®ãããªæå¹ãªå€ãç¶æãã€ã€ãnullãŸãã¯undefinedã®å Žåã«ã®ã¿å®å
šã«ããã©ã«ãå€ãèšå®ã§ããŸãã
æŒç®åã®çµã¿åããã«é¢ããæ³šæç¹
??æŒç®åã¯ãä»ã®è«çæŒç®å(&&, ||)ãšäžç·ã«äœ¿çšããå Žåãæ¬åŒ§ãªãã§ã¯äœ¿çšã§ããªãããã«ä»æ§ã§å®ããããŠããŸããããã¯éçºè
ã®ãã¹ãé²ãããã§ãããããã£ãŠãä»ã®æŒç®åãšäžç·ã«äœ¿çšããã«ã¯ãå¿
ãæ¬åŒ§ã§åªå
é äœãæç¢ºã«æå®ããå¿
èŠããããŸãã
// let x = 1 && 2 ?? 3; // SyntaxErrorãçºçïŒ
let x = (1 && 2) ?? 3; // æ£ããäœ¿ãæ¹
console.log(x); // 2
ãŸãšãïŒçå笊ãšä»²è¯ããªãã
ãããŸã§ãJavaScriptã§çå笊(?)ã䜿ããã3ã€ã®äž»èŠãªæ§æãèŠãŠããŸããã
- äžé
æŒç®å (
? :):if...elseãäžè¡ã«ççž®ããæ¡ä»¶ã«å¿ããŠç°ãªãå€ãè¿ããããšãã«äœ¿çšããŸãã - ãªãã·ã§ãã«ãã§ã€ãã³ã° (
?.): ãªããžã§ã¯ãã®ãã¹ããããããããã£ã«ã¢ã¯ã»ã¹ããéãnullãundefinedã«ãããšã©ãŒãé²ããããšãã«äœ¿çšããŸãã - nullåäœæŒç®å (
??): 倿°ã«ããã©ã«ãå€ãå²ãåœãŠãéã0ã""ã®ãããªfalsyãªå€ãæå¹ãªãã®ãšããŠæ±ããããšãã«äœ¿çšããŸãã
ããã3ã€ã®æ§æã¯ãçŸä»£ã®JavaScriptéçºã«ãããŠã³ãŒãã®å®å®æ§ãšå¯èªæ§ã倧å¹
ã«åäžãããå¿
é ã®ããŒã«ã§ããæåã¯å°ã銎æã¿ããªããããããŸããããäœåºŠãå®éã«äœ¿ã£ãŠã¿ãã°ããã«æ
£ãããã®äŸ¿å©ãã«é
äºãããããšã§ãããããããããªãã®ã³ãŒãã«ããè€éãªifæã&&ãã§ãŒã³ããæŽç·Žãããçåç¬Šæ§æã«å€ããŠã¿ãŸãããïŒ