JavaScriptãã³ãã¬ãŒããªãã©ã«ã®åŒ·åãªæ©èœãç¹ã«é«åºŠãªæååæäœã®ããã®ã¿ã°ä»ããã³ãã¬ãŒããšæåååŠçæè¡ã«çŠç¹ãåœãŠãŠè§£èª¬ãã«ã¹ã¿ã ã¿ã°ã®äœææ¹æ³ãåŠã³ãã³ãŒãã匷åããŸãããã
JavaScript ãã³ãã¬ãŒããªãã©ã«ïŒã¿ã°ä»ããã³ãã¬ãŒããšæåååŠçã®æ¯èŒ
ECMAScript 2015 (ES6)ã§å°å ¥ãããJavaScriptã®ãã³ãã¬ãŒããªãã©ã«ã¯ãJavaScriptã«ãããæååã®æ±ãã«é©åœããããããŸãããããã¯åŸæ¥ã®æååé£çµã«ä»£ãããããã¯ãªãŒã³ã§èªã¿ãããæ¹æ³ã§ãããè€æ°è¡æååãæååè£éãšãã£ã匷åãªæ©èœãæäŸããŸããããããåºæ¬çãªæ©èœã ãã§ãªããã¿ã°ä»ããã³ãã¬ãŒãã¯ãŸã£ããæ°ããã¬ãã«ã®æåååŠçèœåãè§£ãæŸã¡ãŸãããã®ã¬ã€ãã§ã¯ããã³ãã¬ãŒããªãã©ã«ã®ãã¥ã¢ã³ã¹ãæ¢ããã¿ã°ä»ããã³ãã¬ãŒããæ·±ãæãäžããæšæºçãªæåååŠçæè¡ãšæ¯èŒããŸãã
ãã³ãã¬ãŒããªãã©ã«ãšã¯ïŒ
ãã³ãã¬ãŒããªãã©ã«ã¯ãåŒãåã蟌ãããšãã§ããæååãªãã©ã«ã§ããããã«ã¯ã©ãŒããã·ã³ã°ã«ã¯ã©ãŒãã®ä»£ããã«ãããã¯ãã£ãã¯ïŒ`ïŒæåã§å²ãŸããŸãããã®åçŽãªå€æŽããè±ããªå¯èœæ§ãåºããŸãã
åºæ¬çãªæ§æãšè£é
ãã³ãã¬ãŒããªãã©ã«ã®åºæ¬çãªæ©èœã¯æååè£éã§ãã${expression}
ãšããæ§æã䜿ã£ãŠãJavaScriptã®åŒãæååå
ã«çŽæ¥åã蟌ãããšãã§ããŸããåŒãè©äŸ¡ããããã®çµæãæååã«å€æãããŠãã³ãã¬ãŒããªãã©ã«ã«æ¿å
¥ãããŸãã
const name = 'Alice';
const age = 30;
const greeting = `Hello, my name is ${name} and I am ${age} years old.`;
console.log(greeting); // Output: Hello, my name is Alice and I am 30 years old.
ããã¯ãåçã®æååé£çµãããå€§å¹ ã«ã¯ãªãŒã³ã§èªã¿ããããªã£ãŠããŸãïŒ
const name = 'Alice';
const age = 30;
const greeting = 'Hello, my name is ' + name + ' and I am ' + age + ' years old.';
console.log(greeting);
è€æ°è¡æåå
ãã³ãã¬ãŒããªãã©ã«ã¯ãŸããè€æ°è¡æååã®äœæãç°¡çŽ åããŸããé¢åãª\n
æåã䜿ããã«ãããã¯ãã£ãã¯å
ã«çŽæ¥æ¹è¡ãå«ããããšãã§ããŸãã
const multiLineString = `This is a
multi-line
string.`;
console.log(multiLineString);
/* Output:
This is a
multi-line
string.
*/
å¯Ÿç §çã«ãåŸæ¥ã®æååé£çµã§è€æ°è¡æååãäœæãããšããšã©ãŒãçºçãããããèªã¿ã«ãããªãå¯èœæ§ããããŸãã
ã¿ã°ä»ããã³ãã¬ãŒãïŒãã®åãè§£ãæŸã€
ã¿ã°ä»ããã³ãã¬ãŒãã¯ããŸãã«ã²ãŒã ãã§ã³ãžã£ãŒã§ããããã«ããããã³ãã¬ãŒããªãã©ã«ã颿°ã§åŠçããããšãã§ããŸããã¿ã°ãšã¯ããã³ãã¬ãŒããªãã©ã«ã®åéšåãšè£éãããå€ãšãšãã«åŒã³åºãããåãªã颿°ã®ããšã§ãã
æ§æãšé¢æ°ã®æ§é
ã¿ã°ä»ããã³ãã¬ãŒãã®æ§æã¯åçŽã§ãããã³ãã¬ãŒããªãã©ã«ã®åã«ã¿ã°é¢æ°ã®ååã眮ãã ãã§ãïŒ
const name = 'Bob';
const age = 25;
const result = myTag`My name is ${name} and I am ${age} years old.`;
console.log(result);
myTag
颿°ã¯ä»¥äžã®åŒæ°ãåãåããŸãïŒ
- strings: ãã³ãã¬ãŒãããã®æååãªãã©ã«ã®é åã
- ...values: è£éãããåŒã®å€ã
strings
é
åã«ã¯ãè£éãããå€ã®*å*ã*é*ã*åŸ*ã®æååéšåãå«ãŸããŸããvalues
åŒæ°ã¯ããã¹ãŠã®è£éãããå€ãé
åã«éããæ®äœåŒæ°ïŒ...values
ïŒã§ãã
function myTag(strings, ...values) {
console.log('strings:', strings);
console.log('values:', values);
return 'Processed String';
}
const name = 'Bob';
const age = 25;
const result = myTag`My name is ${name} and I am ${age} years old.`;
/* Output:
strings: ["My name is ", " and I am ", " years old.", raw: Array(3)]
values: ["Bob", 25]
*/
strings
é
åã«ã¯ããšã¹ã±ãŒããããŠããªãçã®æååãªãã©ã«ãå«ãraw
ããããã£ãããããšã«æ³šæããŠãã ãããããã¯ãšã¹ã±ãŒãã·ãŒã±ã³ã¹ãæ±ãéã«äŸ¿å©ã§ãã
ã«ã¹ã¿ã ã¿ã°ã®äœæïŒå®è·µçãªäŸ
ã¿ã°ä»ããã³ãã¬ãŒãã®çã®åã¯ãç¹å®ã®æåååŠçã¿ã¹ã¯ã®ããã«ã«ã¹ã¿ã ã¿ã°ãå®çŸ©ã§ããèœåã«ãããŸãã以äžã«ããã€ãã®å®è·µçãªäŸãæããŸãïŒ
1. HTMLãšã¹ã±ãŒã
ã¯ãã¹ãµã€ãã¹ã¯ãªããã£ã³ã°ïŒXSSïŒæ»æãé²ãããšã¯ããŠã§ãã»ãã¥ãªãã£ã«ãšã£ãŠéåžžã«éèŠã§ããã¿ã°ä»ããã³ãã¬ãŒãã¯ãè£éãããå€ã®HTMLãšã³ãã£ãã£ãèªåçã«ãšã¹ã±ãŒãããããšãã§ããŸãã
function escapeHTML(strings, ...values) {
const escapedValues = values.map(value => {
return String(value)
.replace(/&/g, '&')
.replace(//g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''');
});
let result = strings[0];
for (let i = 0; i < escapedValues.length; i++) {
result += escapedValues[i] + strings[i + 1];
}
return result;
}
const userInput = '';
const safeHTML = escapeHTML`User input: ${userInput}`;
console.log(safeHTML);
// Output: User input: <script>alert("XSS");</script>
2. ããŒã«ã©ã€ãŒãŒã·ã§ã³ïŒi18nïŒ
ã¿ã°ä»ããã³ãã¬ãŒãã¯ãèšèªã³ãŒãã«åºã¥ããŠç¿»èš³ãæ€çŽ¢ãã䟿å©ãªæ¹æ³ãæäŸããããšã§ãåœéåïŒi18nïŒãç°¡çŽ åããããã«äœ¿çšã§ããŸãã
// Simplified example (requires a translation dictionary)
const translations = {
en: {
greeting: 'Hello, {name}!',
agePrompt: 'You are {age} years old.'
},
fr: {
greeting: 'Bonjour, {name} !',
agePrompt: 'Vous avez {age} ans.'
},
es: {
greeting: '¡Hola, {name}!',
agePrompt: 'Tienes {age} años.'
}
};
let currentLanguage = 'en';
function i18n(strings, ...values) {
const key = strings.join('{}'); // Simple key generation, can be improved
const translation = translations[currentLanguage][key];
if (!translation) {
console.warn(`Translation not found for key: ${key}`);
return strings.reduce((acc, part, i) => acc + part + (values[i] || ''), ''); // Return original string
}
// Replace placeholders with values
let result = translation;
values.forEach((value, index) => {
result = result.replace(`{${index}}`, value);
});
return result;
}
const name = 'Carlos';
const age = 35;
console.log(i18n`Hello, {name}! You are {age} years old.`); // Output (English): Hello, Carlos! You are 35 years old.
currentLanguage = 'fr';
console.log(i18n`Hello, {name}! You are {age} years old.`); // Output (French): Translation not found, so returns English: Hello, Carlos! You are 35 years old. (because a more complex key is needed.)
泚ïŒããã¯ç°¡ç¥åãããäŸã§ããå®éã®ã·ããªãªã§ã¯ãããå ç¢ãªç¿»èš³ã©ã€ãã©ãªãšããŒçææŠç¥ã䜿çšããããšã«ãªããŸãã
3. ã¹ã¿ã€ãªã³ã°ãšãã©ãŒããã
ã¿ã°ä»ããã³ãã¬ãŒãã¯ãæååã«ã«ã¹ã¿ã ã®ã¹ã¿ã€ãªã³ã°ããã©ãŒããããé©çšããããã«äœ¿çšã§ããŸããäŸãã°ãç¹å®ã®åèªã«èªåçã«å€ªåã®ãã©ãŒããããé©çšããã¿ã°ãäœæããããšãã§ããŸãã
function bold(strings, ...values) {
let result = strings[0];
for (let i = 0; i < values.length; i++) {
result += `${values[i]}` + strings[i + 1];
}
return result;
}
const item = 'product';
const price = 99.99;
const formattedString = bold`The ${item} costs ${price}.`;
console.log(formattedString); // Output: The product costs 99.99.
4. å ¥åã®æ€èšŒ
ã¿ã°ä»ããã³ãã¬ãŒãã¯ãå ¥åããŒã¿ãæ€èšŒããããã«ã䜿çšã§ããŸããããã¯ããŠãŒã¶ãŒãæäŸããå€ãç¹å®ã®ã«ãŒã«ã«æºæ ããŠããããšãä¿èšŒããã®ã«ç¹ã«åœ¹ç«ã¡ãŸãã
function validateEmail(strings, ...values) {
const email = values[0]; // Assuming only one value: the email address
const emailRegex = /^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/;
if (!emailRegex.test(email)) {
return 'Invalid email address.';
}
return `Valid email: ${email}`;
}
const email1 = 'test@example.com';
const email2 = 'invalid-email';
console.log(validateEmail`Email address: ${email1}`); // Output: Valid email: test@example.com
console.log(validateEmail`Email address: ${email2}`); // Output: Invalid email address.
ã¿ã°ä»ããã³ãã¬ãŒãã®ã»ãã¥ãªãã£ã«é¢ããèæ ®äºé
ã¿ã°ä»ããã³ãã¬ãŒãã¯å€ãã®å©ç¹ãæäŸããŸãããç¹ã«ãŠãŒã¶ãŒå ¥åãæ±ãéã«ã¯ãæœåšçãªã»ãã¥ãªãã£äžã®åœ±é¿ã«æ³šæããããšãéèŠã§ããXSSè匱æ§ãé²ãããã«ãåžžã«ãŠãŒã¶ãŒãæäŸããå€ããµãã¿ã€ãºãŸãã¯ãšã¹ã±ãŒãããŠãã ããããµãŒãããŒãã£ã®ã©ã€ãã©ãªããã¿ã°ã䜿çšããå Žåã¯ããããååã«æ€èšŒãããä¿¡é Œã§ãããã®ã§ããããšã確èªããŠãã ããã
æåååŠçæè¡ïŒæ¯èŒ
ã¿ã°ä»ããã³ãã¬ãŒãã¯ãæååãåŠçããããã®åŒ·åã§æè»ãªæ¹æ³ãæäŸããŸããããã¹ãŠã®ã·ããªãªã«ãšã£ãŠåžžã«æé©ãªè§£æ±ºçãšã¯éããŸããã以äžã«ãä»ã®äžè¬çãªæåååŠçæè¡ãšã®æ¯èŒã瀺ããŸãã
æ£èŠè¡šçŸ
æ£èŠè¡šçŸã¯ãæååã®ãã¿ãŒã³ãããã³ã°ãšæäœã®ããã®åŒ·åãªããŒã«ã§ããæ¬¡ã®ãããªã¿ã¹ã¯ã«é©ããŠããŸãïŒ
- å ¥å圢åŒã®æ€èšŒïŒäŸïŒã¡ãŒã«ã¢ãã¬ã¹ãé»è©±çªå·ïŒã
- æååããã®ç¹å®æ å ±ã®æœåºïŒäŸïŒããã¥ã¡ã³ãå ã®ãã¹ãŠã®URLãæ€çŽ¢ïŒã
- æååå ã®ãã¿ãŒã³ã®çœ®æïŒäŸïŒãã¹ãŠã®HTMLã¿ã°ãåé€ïŒã
å©ç¹ïŒ
- è€éãªãã¿ãŒã³ãããã³ã°ã«å¯ŸããŠéåžžã«å¹ççã
- åºããµããŒããããããçè§£ãããŠããã
æ¬ ç¹ïŒ
- ç¹ã«è€éãªãã¿ãŒã³ã®å Žåãèªã¿æžããä¿å®ãå°é£ã«ãªãããšãããã
- ç¹å®ã®ã¿ã¹ã¯ã§ã¯ãã¿ã°ä»ããã³ãã¬ãŒããããæè»æ§ãäœãå Žåãããã
const text = 'This is a string with some URLs: https://www.example.com and http://another.example.org.';
const urls = text.match(/(https?:\/\/[^\s]+)/g);
console.log(urls); // Output: [ 'https://www.example.com', 'http://another.example.org' ]
æååã¡ãœããïŒsubstring
, slice
, replace
ãªã©ïŒ
JavaScriptã®çµã¿èŸŒã¿æååã¡ãœããã¯ãæååãæäœããããã®åºæ¬çãªããŒã«ã»ãããæäŸããŸããæ¬¡ã®ãããªåçŽãªã¿ã¹ã¯ã«é©ããŠããŸãïŒ
- éšåæååã®æœåºã
- æåãŸãã¯éšåæååã®çœ®æã
- æååã®å€§æåãŸãã¯å°æåãžã®å€æã
å©ç¹ïŒ
- åºæ¬çãªæååæäœã«ã·ã³ãã«ã§äœ¿ããããã
- åçŽãªã¿ã¹ã¯ã«ã¯äžè¬çã«å¹ççã
æ¬ ç¹ïŒ
- ããè€éãªæååæäœã§ã¯é¢åã«ãªãããšãããã
- æ£èŠè¡šçŸãã¿ã°ä»ããã³ãã¬ãŒããããæè»æ§ãäœãã
const str = 'Hello, world!';
const substring = str.substring(0, 5); // Extract the first 5 characters
console.log(substring); // Output: Hello
ã¿ã°ä»ããã³ãã¬ãŒããæ£èŠè¡šçŸãæååã¡ãœããã®äœ¿ãåã
ã©ã®æè¡ã䜿çšãããã®éžæã¯ãã¿ã¹ã¯ã®ç¹å®ã®èŠä»¶ã«äŸåããŸãã
- ã¿ã°ä»ããã³ãã¬ãŒãïŒHTMLãšã¹ã±ãŒããããŒã«ã©ã€ãŒãŒã·ã§ã³ãã¹ã¿ã€ãªã³ã°ãå ¥åæ€èšŒãªã©ãã«ã¹ã¿ã ããžãã¯ãå¿ èŠãšããè€éãªæåååŠçã¿ã¹ã¯ã«äœ¿çšããŸãããã¡ã€ã³åºæèšèªïŒDSLïŒã®äœæã«ã圹ç«ã¡ãŸãã
- æ£èŠè¡šçŸïŒãã¿ãŒã³ãããã³ã°ãæœåºã眮æã¿ã¹ã¯ã«äœ¿çšããŸããç¹ã«å ¥å圢åŒã®æ€èšŒãæååããã®ããŒã¿æœåºã«é©ããŠããŸãã
- æååã¡ãœããïŒéšåæååã®æœåºãæåã®çœ®æã倧æåã»å°æåã®å€æãªã©ãåçŽãªæååæäœã¿ã¹ã¯ã«äœ¿çšããŸãã
å Žåã«ãã£ãŠã¯ãç®çã®çµæãéæããããã«ç°ãªãæè¡ãçµã¿åãããå¿ èŠããããããããŸãããäŸãã°ãã¿ã°ä»ããã³ãã¬ãŒãã䜿çšããŠHTMLãšã³ãã£ãã£ããšã¹ã±ãŒããããã®åŸã§æ£èŠè¡šçŸã䜿çšããŠãšã¹ã±ãŒããããæååããç¹å®ã®æ å ±ãæœåºããããšãã§ããŸãã
ãã¹ããã©ã¯ãã£ã¹ãšèæ ®äºé
- ã¿ã°é¢æ°ã¯å°ãããçŠç¹ãçµã£ããã®ã«ããã ã¿ã°é¢æ°ã¯çæ³çã«ã¯ãåäžã®æç¢ºã«å®çŸ©ãããã¿ã¹ã¯ãå®è¡ããã¹ãã§ãã
- ã¿ã°é¢æ°ã«ã¯èª¬æçãªååã䜿çšããã ããã«ãããã³ãŒããèªã¿ããããªããçè§£ãããããªããŸãã
- ãšã©ãŒãé©åã«åŠçããã ã¿ã°é¢æ°ã§ãšã©ãŒãçºçããå Žåã¯ãæå³ã®ãããšã©ãŒã¡ãã»ãŒãžãè¿ãããäŸå€ãã¹ããŒããã¹ãã§ãã
- ããã©ãŒãã³ã¹ã«æ³šæããã ã¿ã°é¢æ°ã¯ãç¹ã«é »ç¹ã«äœ¿çšãããããè€éãªæäœãå®è¡ãããããå Žåãããã©ãŒãã³ã¹ã«åœ±é¿ãäžããå¯èœæ§ããããŸãã
- äžè¬çãªã¿ã°ä»ãã¿ã¹ã¯ã«ã¯ã©ã€ãã©ãªã®äœ¿çšãæ€èšããã HTMLãšã¹ã±ãŒããããŒã«ã©ã€ãŒãŒã·ã§ã³ãã¹ã¿ã€ãªã³ã°ãªã©ã®ã¿ã¹ã¯ã«å¯Ÿå¿ããããã«ãæžã¿ã®ã¿ã°é¢æ°ãæäŸããã©ã€ãã©ãªãããã€ãå©çšå¯èœã§ãã
- ã»ãã¥ãªãã£è匱æ§ãé²ãããã«ãåžžã«ãŠãŒã¶ãŒå ¥åããµãã¿ã€ãºããã ããã¯ãç¹ã«ã¿ã°ä»ããã³ãã¬ãŒãã䜿çšããŠãŠãŒã¶ãŒãæäŸããå€ãåŠçããå Žåã«éèŠã§ãã
çµè«
JavaScriptã®ãã³ãã¬ãŒããªãã©ã«ãç¹ã«ã¿ã°ä»ããã³ãã¬ãŒãã®è¿œå ã«ãããæååãæäœããããã®åŒ·åã§æè»ãªæ¹æ³ãæäŸãããŸããã¿ã°ä»ããã³ãã¬ãŒãã®å©ç¹ãšéçãçè§£ããä»ã®æåååŠçæè¡ãšæ¯èŒããããšã§ãããå¹ççã§ãèªã¿ããããå®å šãªã³ãŒããæžãããšãã§ããŸããWebã¢ããªã±ãŒã·ã§ã³ãã³ãã³ãã©ã€ã³ããŒã«ããŸãã¯ãµãŒããŒãµã€ãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããå Žåã§ãããã³ãã¬ãŒããªãã©ã«ãšã¿ã°ä»ããã³ãã¬ãŒããç¿åŸããããšã¯ãJavaScriptã¹ãã«ãå€§å¹ ã«åäžãããã§ãããã