ãã«å¤å使¼ç®å (??)
Baseline
åºãå©ç¨å¯è½
ãã®æ©è½ã¯åºãå®è£ ããã¦ãããå¤ãã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã©ã¦ã¶ã¼ã§åä½ãã¾ãã2020å¹´7æä»¥éããã¹ã¦ã®ãã©ã¦ã¶ã¼ã§å©ç¨å¯è½ã§ãã
ãã«å¤å使¼ç®å (??) ã¯è«çæ¼ç®åã®ä¸ç¨®ã§ãããã®æ¼ç®åã¯å·¦è¾ºã null ã¾ã㯠undefined ã®å ´åã«å³è¾ºã®ãªãã©ã³ããè¿ãããã以å¤ã®å ´åã«å·¦è¾ºã®ãªãã©ã³ããè¿ãã¾ãã
試ãã¦ã¿ã¾ããã
const foo = null ?? "default string";
console.log(foo);
// äºæ³ãããçµæ: "default string"
const baz = 0 ?? 42;
console.log(baz);
// äºæ³ãããçµæ: 0
æ§æ
leftExpr ?? rightExpr
解説
ãã«å¤å使¼ç®åã¯ãè«çåæ¼ç®å (||) ã®ç¹æ®å½¢ã¨è¦ãªããã¨ãã§ãã¾ããå¾è
ã¯å·¦è¾ºã®å¤ã null ã undefined ã ãã§ãªããä½ããã®å½å¤ã§ãã£ãå ´åã«å³è¾ºå¤ãè¿ããã®ã§ããè¨ãæããã¨ã|| ã使ã£ã¦å¥ã®å¤æ° foo ã«ä½ããã®æ¢å®å¤ãä¸ããå ´åãä¸é¨ã®å½å¤ï¼'' ã 0 ãªã©ï¼ã使ç¨å¯è½ã¨ã¿ãªãã¨ãäºæ³å¤ã®åä½ã«ééãããã¨ãããã¾ãã詳ããä¾ã¯ä»¥ä¸ãåç
§ãã¦ãã ããã
ãã«å¤å使¼ç®åã¯æ¼ç®åã®åªå
é ä½ãä¸ãã 5 çªç®ã§ã || ã®ããä¸ãæ¡ä»¶ï¼ä¸é
ï¼æ¼ç®åã®ããä¸ã§ãã
è«çç©æ¼ç®å (&&) ã¨è«çåæ¼ç®å (||) ã®ã©ã¡ãããã ?? ã¨ç´æ¥çµåãããã¨ã¯ã§ãã¾ããããã®ãããªå ´åãæ§æã¨ã©ã¼ãçºçãã¾ãã
null || undefined ?? "foo"; // SyntaxError ãçºç
true && undefined ?? "foo"; // SyntaxError ãçºç
代ããã«ãæ¬å¼§ã使ç¨ãã¦åªå é ä½ãæç¤ºçã«æå®ãã¦ãã ããã
(null || undefined) ?? "foo"; // "foo" ãè¿ã
ä¾
>ãã«å¤å使¼ç®åã®ä½¿ç¨
次ã®ä¾ã§ã¯ãæ¢å®å¤ãè¨å®ãã¦ãã¾ãããnull ã undefined 以å¤ã®å¤ã¯ä¿æããã¾ãã
const nullValue = null;
const emptyText = ""; // falsy
const someNumber = 42;
const valA = nullValue ?? "default for A";
const valB = emptyText ?? "default for B";
const valC = someNumber ?? 0;
console.log(valA); // "default for A"
console.log(valB); // "" ï¼ç©ºæåå㯠null ã§ã undefined ã§ããªãããï¼
console.log(valC); // 42
夿°ã«æ¢å®å¤ãä»£å ¥ãã
以åã¯ã夿°ã«æ¢å®å¤ã代å
¥ãããå ´åã®ä¸è¬çãªãã¿ã¼ã³ã¯ãè«ç OR æ¼ç®åï¼||ï¼ã使ç¨ãããã¨ã§ããã
let foo;
// foo ã«ã¯ä½ãå¤ã代å
¥ããã¦ããªãã®ã§ãundefined ã®ã¾ã¾ã§ã
const someDummyText = foo || "Hello!";
ãããã|| ãè«çæ¼ç®åã§ããããã左辺ã®å¤ã¯è©ä¾¡ã«ãã£ã¦å¼·å¶çã«è«çå¤ã«ãªããå½å¤ï¼0ã''ãNaNãfalse ãªã©ï¼ãè¿ããããã¨ã¯ããã¾ããããã®åä½ã¯ã 0ã''ãNaN ãæå¹ãªå¤ã¨èãã¦ããå ´åãäºæãã¬çµæãå¼ãèµ·ããå¯è½æ§ãããã¾ãã
const count = 0;
const text = "";
const qty = count || 42;
const message = text || "hi!";
console.log(qty); // 42 ã§ãã 0 ã§ã¯ãªã
console.log(message); // "hi!" ã§ãã "" ã§ã¯ãªã
ãã«å¤å使¼ç®åã¯ã左辺ã®å¤ã null ããã㯠undefined ã®ã©ã¡ããï¼ãã®ä»ã® falsy ãªå¤ã¯å«ã¿ã¾ããï¼ã«è©ä¾¡ãããå ´åã«ã®ã¿å³è¾ºã®å¤ãè¿ããã¨ã§ããã®æ½å¨çãªå±éºãåé¿ãã¾ãã
const myText = ""; // 空æååï¼ããªãã¡å½å¤ã§ãããï¼
const notFalsyText = myText || "Hello world";
console.log(notFalsyText); // Hello world
const preservingFalsy = myText ?? "Hi neighborhood";
console.log(preservingFalsy); // '' ï¼myText 㯠undefined ã§ã null ã§ããªãï¼
ç絡è©ä¾¡
ãè«çåãæ¼ç®åããè«çç©ãæ¼ç®åã¨åæ§ã«ã左辺ã null ã§ã undefined ã§ããªããã¨ã夿ããå ´åãå³è¾ºã®å¼ã¯è©ä¾¡ããã¾ããã
function a() {
console.log("a ãå¼ã³åºããã¾ãã");
return undefined;
}
function b() {
console.log("b ãå¼ã³åºããã¾ãã");
return false;
}
function c() {
console.log("c ãå¼ã³åºããã¾ãã");
return "foo";
}
console.log(a() ?? c());
// "A ãå¼ã³åºããã¾ãã"ã "C ãå¼ã³åºããã¾ãã" ã®ã㨠"foo" ã¨åºå
// A() 㯠undefined ãè¿ãããã両æ¹ã®å¼ãè©ä¾¡ããããã
console.log(b() ?? c());
// "B ãå¼ã³åºããã¾ãã" ã®ã㨠"false" ã¨åºå
// B() 㯠false ãè¿ãããï¼ãã㦠null ã undefined ãè¿ããªãï¼ã
// å³è¾ºã®å¼ã¯è©ä¾¡ãããªã
ãªãã·ã§ãã«ãã§ã¼ã³æ¼ç®å (?.) ã¨ã®é¢ä¿
ãã«å¤å使¼ç®åã¯ã undefined 㨠null ãç¹å®ã®å¤ã¨ãã¦æ±ãã¾ããããªãã·ã§ãã«ãã§ã¼ã³æ¼ç®å (?.) ãåæ§ã®æ±ãããã¾ãããã®æ¼ç®åã¯ãnull ã¾ã㯠undefined ã§ããå¯è½æ§ã®ãããªãã¸ã§ã¯ãã®ããããã£ã«ã¢ã¯ã»ã¹ããã®ã«ä¾¿å©ã§ãã
const foo = { someFooProp: "hi" };
console.log(foo.someFooProp?.toUpperCase() ?? "not available"); // "HI"
console.log(foo.someBarProp?.toUpperCase() ?? "not available"); // "not available"
仿§æ¸
| 仿§æ¸ |
|---|
| ECMAScript® 2027 Language Specification > # prod-CoalesceExpression > |