Javascript問題集(変数)解答
「Javascript問題集(変数)」の解答は下記になります。
問題1の解答
このコードを実行すると、
{name: 'Abigail', age:43}
という「オブジェクト」がコンソールに出力されます。
オブジェクト「human1」をスプレッド構文を使って変数「human2」に「複製」しています。「複製したオブジェクト」と「元のオブジェクト」は別々の参照先を持ちます。
問題2の解答
「変数の宣言」が「スコープの先頭」に「巻き上げられること」を「変数の巻き上げ」と呼びます。
console.log(num); // 結果は「undefined」 var num = 1;
このコードは「変数の巻き上げ」により、
var num: console.log(num); // 結果は「undefined」 num = 1;
のように解釈されます。
変数「num」が宣言と初期化される前に利用されていますが、エラーが発生せず「変数の巻き上げ」が起こるため「undefined」が出力されます。
問題3の解答
「関数」の「引数」として「オブジェクト」を受け取るには、下記のように「オブジェクト」の「プロパティ」を引数として指定します。
let human = { name: "Grace", age: 37, }; function greet(human) { console.log(`Hello, ${human.name}! ${human.name} is ${human.age} years old.`); } greet(human); // 結果:Hello, Grace! Grace is 37 years old.
問題4の解答
コードを実行すると、「ReferenceError: Cannot access 'num' before initialization」というエラーが発生します。
このコードでは、関数内で「num」を再宣言しているため、関数内のスコープで「num」が存在し、宣言前にアクセスすることができないエラーが発生します。このようなエラーは、letで宣言された「変数の巻き上げ(hoisting)」によって発生します。
問題5の解答
「オブジェクト」の「プロパティ」を動的に取得するには、ブラケットを利用する方法があります。
let car = { name: "wagon", weight: 1500, }; let pName = "weight"; console.log(car[pName]); // 結果:1500
このように、変数「pName」に「プロパティ名」を代入し、「ブラケット」を利用して「オブジェクト」の「プロパティ」に変数に格納された「プロパティ名」によって「動的」にアクセスすることができます。
問題6の解答
「typeof」演算子を使用します。例えば、
console.log(typeof num);
のように記述すると、変数「num」に代入された値の「データ型」を確認することができます。
問題7の解答
「toString()」または「String()」を使用します。
let num = 1; num.toString(); String(num);
のように利用します。
問題8の解答
コードを実行すると、
{name: 'Thomas', age: 25}
という「オブジェクト」がコンソールに出力されます。
このコードでは、オブジェクト「human1」を変数「human2」に代入しています。しかし、オブジェクトは参照値であり、変数「human2」が「human1」を参照しているため、オブジェクトの変更が「human1」にも反映されます。
問題9の解答
「=」(イコール)を使用します。
let num = 3;
のように、変数「num」に「3」という値を代入します。
問題10
「オブジェクト」の「プロパティ」にアクセスするには、ドットまたはブラケットを利用します。例えば、
let human = { name: "Bob", age: 21, };
のようなオブジェクトの「name」という「プロパティ」にアクセスするには、下記のようにドットを利用します。
console.log(human.name);
また、下記のようにブラケットを使用することもできます。
console.log(human["age"]);
問題11の解答
「parseInt()」や「parseFloat()」などのメソッドを使用します。例えば、
let strNum = '1'; console.log(parseInt(strNum));
のように利用します。
問題12の解答
コードを実行すると、「ReferenceError: Cannot access 'num' before initialization」というエラーが発生します。
このコードでは、ブロックスコープ内で「num」を再宣言しているため、ブロックスコープ内のスコープで「num」が存在し、宣言前にアクセスすることができないためエラーが発生します。
問題13の解答
コードを実行すると、
[1, 2, 3]
という配列がコンソールに出力されます。
このコードでは、配列「num1」を変数「num2」に代入しています。しかし、その後で変数「num2」に新しい配列を代入しているため、変数「num1」には影響がありません。
問題14の解答
「テンプレート文字列」に「変数」を埋め込むには、「バッククォート」で文字列を囲み、「変数」を${}で囲んで埋め込みます。
let name = "Kein"; console.log(`Hello, ${name}!`);
このように、変数「name」を${}で囲んで「テンプレート文字列」に埋め込むことができます。
問題15の解答
「変数のスコープ」とは、「変数が参照できる範囲」のことを言います。JavaScriptでは、スコープは下記の2つに分かれます。
グローバルスコープ:「関数の外部」で宣言された「変数」は、「グローバルスコープ」となります。「グローバルスコープ変数」は、プログラム内のどこからでも利用できます。
ローカルスコープ:「関数の内部」で宣言された「変数」は、「ローカルスコープ」となります。「ローカルスコープ変数」は、その関数内でのみ利用できます。
問題16の解答
「let」または「var」を使用して、「変数」の宣言と代入を同時に行います。例えば、
let num = 1; var numr = 2;
のようになります。このような処理を「変数の初期化」と言います。
問題17の解答
代入演算子「=」を使用します。
のように、変数「num1」に代入された値を変数「num2」に代入することができます。
問題18の解答
「半角英数字」「アンダースコア」「ドル記号」が使用できます。変数名の「最初の文字」に数字を使用することはできません。
問題19の解答
「変数」を利用する際に、「変数自身」が属するスコープで「変数」が見つからない場合は、「親のスコープ」に向かって「変数の探索」が行われる仕組みを「スコープチェーン」と言います。例えば、
のようなプログラムでは、関数「test」の内部では、「変数num」が参照されていますが、「変数num」は「関数の外部」で宣言されているため、通常は利用できません。
しかし、このようなプログラムでは、「スコープチェーン」によって「親(外部)のスコープ」に変数を探索しにいきます。
この動作のことを「スコープチェーン」と言います。
問題20の解答
「var」、「let」があります。それぞれの違いは、スコープの範囲が異なることです。