const
Baseline
åºãå©ç¨å¯è½
ãã®æ©è½ã¯åºãå®è£ ããã¦ãããå¤ãã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã©ã¦ã¶ã¼ã§åä½ãã¾ãã2015å¹´7æä»¥éããã¹ã¦ã®ãã©ã¦ã¶ã¼ã§å©ç¨å¯è½ã§ãã
const 宣è¨ã¯ãããã¯ã¹ã³ã¼ãã®ãã¼ã«ã«å¤æ°ï¼å®æ°ï¼ã宣è¨ãã¾ãã宿°ã®å¤ã¯ä»£å
¥æ¼ç®åã使ç¨ãã¦å代å
¥ãããã¨ãã§ãã¾ãããã宿°ããªãã¸ã§ã¯ãã§ãã£ãå ´åãããã«ããããã£ã追å ããããæ´æ°ããããåé¤ããããããã¨ãã§ãã¾ãã
試ãã¦ã¿ã¾ããã
const number = 42;
try {
number = 99;
} catch (err) {
console.log(err);
// äºæ³ãããçµæ: TypeError: invalid assignment to const 'number'
// ï¼æ³¨ï¼æ£ç¢ºãªçµæã¯ãã©ã¦ã¶ã¼ä¾åã§ãï¼
}
console.log(number);
// äºæ³ãããçµæ: 42
æ§æ
const name1 = value1;
const name1 = value1, name2 = value2;
const name1 = value1, name2 = value2, /* â¦, */ nameN = valueN;
nameN-
宣è¨ãã夿°åããããããæ£è¦ã® JavaScript èå¥åã¾ãã¯æ§é åè§£ãã¤ã³ããã¿ã¼ã³ã§ãªããã°ãªãã¾ããã
valueN-
夿°ã®åæå¤ãæ£è¦ã®å¼ã§ããã°ä½ã§ããã¾ãã¾ããã
解説
const 宣è¨ã¯ let ã¨ããä¼¼ã¦ãã¾ãã
-
const宣è¨ã¯ããããã¯ããã³é¢æ°ã®ã¹ã³ã¼ãã«ãªãã¾ãã -
const宣è¨ã¯å®£è¨ããä½ç½®ã«å°éãã¦ããã§ãªãã¨ã¢ã¯ã»ã¹ãããã¨ãã§ãã¾ããï¼ä¸æçãããã¾ã¼ã³ãåç §ãã¦ãã ããï¼ããã®ãããconst宣è¨ã¯ä¸è¬çã«å·»ãä¸ããããªãã¨è¦ãªããã¾ãã -
ã¹ã¯ãªããã®æä¸ä½ã§å®£è¨ãããå ´åã
const宣è¨ã¯globalThisã«ããããã£ã使ãã¾ããã -
const宣è¨ã¯ãåãã¹ã³ã¼ãå ã®ä»ã®å®£è¨ã«ãã£ã¦å宣è¨ãããã¨ã¯ã§ãã¾ããã -
constã¯æã§ã¯ãªã宣è¨ãå§ãã¾ããã¤ã¾ãããããã¯ã®æ¬ä½ã¨ãã¦åç¬ã®const宣è¨ã使ç¨ãããã¨ã¯ã§ãã¾ããï¼å¤æ°ã«ã¢ã¯ã»ã¹ããææ®µããªãã®ã§ãçã«ããªã£ã¦ãã¾ãï¼ãjsif (true) const a = 1; // SyntaxError: Lexical declaration cannot appear in a single-statement context
宿°ã®åæååãå¿ è¦ã§ããåã宣è¨ã®ä¸ã§ãã®å¤ãæå®ããªããã°ãªãã¾ãããï¼å¾ã§å¤æ´ã§ãã¾ããã®ã§ãçã«ããªã£ã¦ãã¾ããï¼
const FOO; // SyntaxError: Missing initializer in const declaration
const 宣è¨ã¯å¤ã¸ã®ä¸å¤ã®åç
§ã使ãã¾ããããã¯ãã®å¤ãä¸å¤ã§ããã¨ããæå³ã§ã¯ãªãã夿°ã®èå¥åã«å代å
¥ã§ããªãã¨ããæå³ã§ããä¾ãã°ãå
容ããªãã¸ã§ã¯ãã®å ´åãããã¯ãªãã¸ã§ã¯ãã®å
容ï¼ä¾ãã°ããããã£ï¼ã¯å¤æ´ã§ãããã¨ãæå³ãã¦ãã¾ããconst 宣è¨ã¯ãã¢ã¤ãã³ãã£ãã£ãä¸å®ã®å¤æ°ã使ãããã®ã§ãã£ã¦ããå¤ãä¸å®ã®å¤æ°ã使ãããã®ã§ã¯ããã¾ãããã¾ãããä¸å¤ã®ãã¤ã³ããã使ããã®ã§ãã£ã¦ããä¸å¤ã®å¤ãã使ããã®ã§ã¯ããã¾ããã
å¤ãã®ã¹ã¿ã¤ã«ã¬ã¤ãï¼MDN ã®ãã®ãå«ãï¼ã§ã¯ã夿°ããã®ã¹ã³ã¼ãã§å代å
¥ãããªãå ´åã¯ã const ã let ã®ä»£ããã«ä½¿ç¨ãããã¨ãæ¨å¥¨ãã¦ãã¾ããããã«ããã夿°ã®åï¼ããªããã£ãã®å ´åã¯å¤ï¼ã夿´ããããã¨ã¯ãªãã¨ããæå³ãæç¢ºã«ãªãã¾ããã¾ããããªããã£ã以å¤ã®å¤æ°ã夿´ãããå ´å㯠let ãæ¨å¥¨ãã人ããã¾ãã
const ãã¼ã¯ã¼ãã«ç¶ããªã¹ãã¯ãã¤ã³ããªã¹ãã¨å¼ã°ããã«ã³ãã§åºåããã¾ãããã®ã«ã³ãã¯ã«ã³ãæ¼ç®åã§ã¯ãªãã = ã¯ä»£å
¥æ¼ç®åã§ã¯ããã¾ãããå¾ã®å¤æ°ã®åæååã¯ããªã¹ãå
ã®åã®å¤æ°ãåç
§ãããã¨ãã§ãã¾ãã
ä¾
>åºæ¬çãªå®æ°ã®ä½¿ãæ¹
宿°ã¯å¤§æåã¾ãã¯å°æåã§å®£è¨ãããã¨ãã§ãã¾ãããç¹ã«ããªããã£ãã®å ´åã¯ãæ¬å½ã«å¤æ´ä¸å¯è½ã§ããã®ã§ããã¹ã¦å¤§æåã§å®£è¨ããã®ãæ £ä¾ã§ãã
// MY_FAV ã宿°ã¨ãã¦å®ç¾©ãã¦ããã®å¤ã 7 ã«ãã¾ã
const MY_FAV = 7;
console.log(`my favorite number is: ${MY_FAV}`);
// 宿°ã®å¤ãå代å
¥ããã¨ã¨ã©ã¼ãçºç
MY_FAV = 20; // TypeError: Assignment to constant variable
// 宿°ãå宣è¨ããã¨ã¨ã©ã¼ãçºç
const MY_FAV = 20; // SyntaxError: Identifier 'MY_FAV' has already been declared
var MY_FAV = 20; // SyntaxError: Identifier 'MY_FAV' has already been declared
let MY_FAV = 20; // SyntaxError: Identifier 'MY_FAV' has already been declared
ãããã¯ã¹ã³ã¼ã
ãããã¯ã¹ã³ã¼ãã®æ§è³ªã«æ³¨æãããã¨ãéè¦ã§ãã
const MY_FAV = 7;
if (MY_FAV === 7) {
// ããã¯åé¡ãªãããããã¯ã¹ã³ã¼ãã® MY_FAV 夿°ã使ãã¾ã
const MY_FAV = 20;
console.log(MY_FAV); // 20
// ããã¯ã°ãã¼ãã«ã³ã³ããã¹ãã«å·»ãä¸ããããã¨ã©ã¼ãçºçãã¾ã
var MY_FAV = 20; // SyntaxError: Identifier 'MY_FAV' has already been declared
}
console.log(MY_FAV); // 7
ãªãã¸ã§ã¯ãã¨é åã®å®æ°
const ã¯ãªãã¸ã§ã¯ãã é
åã«ãä½ç¨ãã¾ãããªãã¸ã§ã¯ãã䏿¸ããããã¨ããã¨ã"Assignment to constant variable" ã¨ããã¨ã©ã¼ãçºçãã¾ãã
const MY_OBJECT = { key: "value" };
MY_OBJECT = { OTHER_KEY: "value" };
ãããããªãã¸ã§ã¯ãã®ãã¼ã¯ä¿è·ããã¦ããªãã®ã§ãæ¬¡ã®æã¯åé¡ãªãå®è¡ããã¾ãã
MY_OBJECT.key = "otherValue";
ãªãã¸ã§ã¯ããä¸å¤ã«ããã«ã¯ã Object.freeze() ã使ç¨ããå¿
è¦ãããã¾ãã
é åãåæ§ã§ããæ°ããé åã夿°ã«å²ãå½ã¦ããã¨ããã¨ã"Assignment to constant variable" ã®ã¨ã©ã¼ãçºçãã¾ãã
const MY_ARRAY = [];
MY_ARRAY = ["B"];
ããããé åã«ã¢ã¤ãã ã追å ãããã¨ã¯ã§ãã夿´ã¯å¯è½ã§ãã
MY_ARRAY.push("A"); // ["A"]
æ§é åè§£ã«ãã宣è¨
ããããã® = ã®å·¦è¾ºã¯ãã¤ã³ããã¿ã¼ã³ã«ããªãã¾ããããã«ãããä¸åº¦ã«è¤æ°ã®å¤æ°ã使ãããã¨ãã§ãã¾ãã
const result = /(a+)(b+)(c+)/.exec("aaabcc");
const [, a, b, c] = result;
console.log(a, b, c); // "aaa" "b" "cc"
詳ããã¯ãæ§é åè§£ãåç §ãã¦ãã ããã
仿§æ¸
| 仿§æ¸ |
|---|
| ECMAScript® 2027 Language Specification > # sec-let-and-const-declarations > |