<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>モダンJavaScript  |  React入門</title>
	<atom:link href="https://react-js.jp/tag/%E3%83%A2%E3%83%80%E3%83%B3javascript/feed" rel="self" type="application/rss+xml" />
	<link>https://react-js.jp</link>
	<description>WebアプリUI構築のためのJavaScriptライブラリ</description>
	<lastBuildDate>Thu, 08 Dec 2022 07:39:25 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.1.1</generator>

<image>
	<url>https://react-js.jp/wp-content/uploads/cropped-React_logo_logotype_emblem_512-32x32.png</url>
	<title>モダンJavaScript  |  React入門</title>
	<link>https://react-js.jp</link>
	<width>32</width>
	<height>32</height>
</image> 
<atom:link rel="hub" href="https://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="https://pubsubhubbub.superfeedr.com"/><atom:link rel="hub" href="https://websubhub.com/hub"/>	<item>
		<title>モダンJavaScriptの変数宣言(let, const)</title>
		<link>https://react-js.jp/let-const</link>
					<comments>https://react-js.jp/let-const#respond</comments>
		
		<dc:creator><![CDATA[りあぴ]]></dc:creator>
		<pubDate>Thu, 08 Dec 2022 07:39:22 +0000</pubDate>
				<category><![CDATA[React]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[モダンJavaScript]]></category>
		<category><![CDATA[変数]]></category>
		<guid isPermaLink="false">https://react-js.jp/?p=46</guid>

					<description><![CDATA[近年、いわゆるモダンJavaScriptと呼ばれるものは2015年に改定されたES6(ES2015)以降を指していることが多いようです。そこで特に大きく変わったのが変数宣言です。 目次 これまでのJavaScriptの変 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>近年、いわゆるモダンJavaScriptと呼ばれるものは2015年に改定されたES6(ES2015)以降を指していることが多いようです。<br>そこで特に大きく変わったのが変数宣言です。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">これまでのJavaScriptの変数宣言</a><ol><ol><li><a href="#toc2" tabindex="0">var で変数宣言する問題点</a><ol><ol><li><a href="#toc3" tabindex="0">・内容を上書きできてしまう</a></li><li><a href="#toc4" tabindex="0">・すでに宣言されていても宣言できてしまう</a></li></ol></li></ol></li></ol></li></ol></li><li><a href="#toc5" tabindex="0">モダンJavaScriptの変数宣言</a><ol><ol><li><a href="#toc6" tabindex="0">letを使った変数宣言</a></li><li><a href="#toc7" tabindex="0">const を使った変数宣言</a></li></ol></li></ol></li><li><a href="#toc8" tabindex="0">constの注意点</a><ol><ol><li><a href="#toc9" tabindex="0">constで配列を宣言して内容を上書きする例</a><ol><ol><li><a href="#toc10" tabindex="0">constで宣言された配列要素の内容を書き換える例</a></li><li><a href="#toc11" tabindex="0">constで宣言された配列に要素を追加する例</a></li><li><a href="#toc12" tabindex="0">constでオブジェクトを宣言して内容を上書きする例</a></li></ol></li></ol></li></ol></li></ol></li></ol>
    </div>
  </div>

<h2><span id="toc1">これまでのJavaScriptの変数宣言</span></h2>



<p>これまでJavaScriptで変数を宣言する時は var を使っていました。<br>var での宣言には問題があり、バグが出やすくなるため現在ではほぼ使われていません。</p>



<h4><span id="toc2">var で変数宣言する問題点</span></h4>



<h6><span id="toc3">・内容を上書きできてしまう</span></h6>



<pre class="wp-block-code javascript"><code>var a = 1;
a = 2; // 内容を上書き

console.log(a); // 2が表示される</code></pre>



<h6><span id="toc4">・すでに宣言されていても宣言できてしまう</span></h6>



<pre class="wp-block-code javascript"><code>var b = 1;<br>var b = 2; // エラーにならない</code></pre>



<p>これらの特徴はコードが小さいうちは良いのですが、大きくなってくるにつれてバグを生み出しやすくなってしまいます。</p>



<p>そこで現在のJavaScriptでは var の代わりに ES6(ES2015) から導入された <span class="red">let</span> と <span class="red">const</span> が使われるようになりました。</p>



<h2><span id="toc5">モダンJavaScriptの変数宣言</span></h2>



<h4><span id="toc6">letを使った変数宣言</span></h4>



<p>letは内容を上書きできるので、ほぼvarと同じように使うことができます。</p>



<pre class="wp-block-code javascript"><code>let a = 1;
a = 2; // 内容を上書き

console.log(a); // 2が表示される</code></pre>



<p>ただし var と違って再宣言しようとするとエラーになります。</p>



<pre class="wp-block-code javascript"><code>let b = 1;<br>let b = 2; // エラーになる</code></pre>



<h4><span id="toc7">const を使った変数宣言</span></h4>



<p>constで変数を宣言すると、内容を上書きできません。<br>もちろん再宣言もできません。</p>



<pre class="wp-block-code javascript"><code>const a = 1;<br>a = 2; // エラーになる</code></pre>



<p>これらの特徴によって、var で変数宣言するよりも比較的安全になるので、現在では let と const で変数を宣言することが標準的になっています。</p>



<h2><span id="toc8">constの注意点</span></h2>



<p>constで宣言した変数は内容を上書きできないと言いましたが、実は種類によっては上書きできてしまうケースがあります。<br>それが配列とオブジェクトです。</p>



<h4><span id="toc9">constで配列を宣言して内容を上書きする例</span></h4>



<h6><span id="toc10">constで宣言された配列要素の内容を書き換える例</span></h6>



<pre class="wp-block-code javascript"><code>const array = &#91;'x', 'y', 'z']; // 配列を宣言
array&#91;2] = 'a'; // 最後の要素の中身を書き換える
console.log(array);
&#91;'x', 'y', 'a'] // 内容が書き換わっている</code></pre>



<h6><span id="toc11">constで宣言された配列に要素を追加する例</span></h6>



<pre class="wp-block-code javascript"><code>array.push('b');<br>console.log(array);<br>&#91;'x', 'y', 'a', 'b'] // 要素が追加されている</code></pre>



<h6><span id="toc12">constでオブジェクトを宣言して内容を上書きする例</span></h6>



<p>まずは const でオブジェクトを宣言します。</p>



<pre class="wp-block-code javascript"><code>const obj = {
  a: 1,
  b: 2
}</code></pre>



<p>constで宣言されたオブジェクトのプロパティを変更してみます。</p>



<pre class="wp-block-code javascript"><code>obj.b = 5;
console.log(obj);
{ a:1, b:5 }</code></pre>



<p>プロパティの中身を書き換えてしまうことができました。<br>さらに新しいプロパティを追加してみます。</p>



<pre class="wp-block-code javascript"><code>obj.c = 3;<br>console.log(obj);<br>{ a:1, b:5, c:3 }</code></pre>



<p>このように新しいプロパティを追加することもできます。</p>



<pre class="wp-block-code javascript"><code>delete obj.b; // プロパティを削除

console.log(obj);
{ a:1, c:3 }</code></pre>



<p>プロパティの削除もできます。</p>



<p>しかし以下のように Object.freeze を使うことでオブジェクトの内容を変更できないようにすることもできます。</p>



<pre class="wp-block-code javascript"><code>const obj2 = {
  a: 1,
  b: 2
};
Object.freeze(obj2); // オブジェクトを凍結

obj2.a = 3; //エラーが出るわけではない
obj2.b = 4; //同上

console.log(obj2);
{ a:1, b:2 } // 上書きする前の値のままになっている</code></pre>



<p>ただし Object.freeze を使っても<span class="bold-red">孫プロパティは変更できてしまう</span>ので注意が必要です。</p>



<pre class="wp-block-code javascript"><code>const obj3 = {
  a: 1,
  b: 2,
  c: {
    d: 3
  }
};
Object.freeze(obj3);

obj3.c.d = 9; // 孫プロパティdの内容を上書き

console.log(obj3);
{ a:1, b:2, c:{ d:9 } } // freezeしたのに上書きできてしまう</code></pre>



<p>以上のようにオブジェクトの場合は const でも中身を書き換えることができるので、Reactでオブジェクトを宣言する場合には基本的に const を使うのが良さそうです。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://react-js.jp/let-const/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
