質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

214閲覧

JavaScriptの値のイミュータブルについての疑問

euicnvhf202105

総合スコア126

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2022/05/07 02:29

前提

JavaScriptの値のイミュータブルについて疑問が出ました。

質問したいこと

以下はdevツールのコンソールに1を2回入力したものです。
AとBは別々の値(数値リテラル)としてnumber型の1が2つ生成されているという認識であっておりますでしょうか?

イメージ説明

また別々の値ということを確認する具体的な方法などがあれば
ご教授いただければ幸いです。

自分で調査したこと

devツールで確認できないか色々なタブを見て回りましたが
それらしき箇所が見つけられませんでした。

test.js

1let a = 1+1 2console.log(a) // 2

↑の2は新しく生成されているということは検索していて理解できました。

その他ネット上、書籍などで上記に当てはまる具体例が
確認できなかったので質問させていただきました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2022/05/07 03:07

何を別の値と表現しているのかわかりませんが、同じ手順で 1 を入力した後に 2 を入力すれば、その 1 と 2 は別の値ですか?
euicnvhf202105

2022/05/07 04:00

わかりにくい表現失礼いたしました。 >同じ手順で 1 を入力した後に 2 を入力すれば、その 1 と 2 は別の値ですか? 私としては別の値だという認識です。 また参考ページありがとうございました。 参考ページにある以下の左のfooと右のfooは別々の文字列リテラルとしてPCやブラウザは解釈している, メモリ上で管理しているという認識であっていますでしょうか? Object.is('foo', 'foo'); こう考えた理由としては参考ページのリンク先の https://developer.mozilla.org/ja/docs/Web/JavaScript/Equality_comparisons_and_sameness#strict_equality_using こちらの書き出しに「厳格な等価性は、2 つの値が等しいか比較します。」という文があったためです。
Zuishin

2022/05/07 05:23

繰り返しますが、同じ値です。
hoshi-takanori

2022/05/07 06:35 編集

JavaScript にはプリミティブ型とそうでないもの (名前がよく分かりませんが、オブジェクト型?) があって、プリミティブ型は値が同じならそれ以上の区別はないけど、オブジェクト型は異なるオブジェクトが同じ値を持つこともある、というあたりをまず押さえておく必要があるかと…。 https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Grammar_and_types#data_structures_and_types
euicnvhf202105

2022/05/07 08:39

>繰り返しますが、同じ値です。 同じ値ということで了解いたしました。ありがとうございます。
euicnvhf202105

2022/05/07 08:41

>プリミティブ型は値が同じならそれ以上の区別はない 参考ページありがとうございます。確認してみます。
guest

回答1

0

ベストアンサー

趣旨が違うかもしれませんがNumberオブジェクトの比較についてはこう

javascript

1console.log(new Number(1)===new Number(1)); //false 2console.log(new Number(1)==new Number(1)); //false

プリミティブとの比較をすると(オブジェクトリテラルと数値リテラルの比較)

javascript

1console.log(new Number(1)===1);//false 2console.log(new Number(1)==1);//true 3console.log(new Number(1)==2);//false

当然プリミティブ同士は値が同じであれば同値

javascript

1console.log(Number(1)===Number(1));//true 2console.log(Number(1)===1);//true 3console.log(1===1);//true 4console.log(Number(1)===2);//false

ただし、intとbigintは厳密にはちがうと判断されます

javascript

1console.log(1==1n);//true 2console.log(1===1n);//false

投稿2022/05/07 05:58

yambejp

総合スコア114825

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

euicnvhf202105

2022/05/07 08:53

回答ありがとうございます。 実際コードで使用する時は比較でのパターンが分かれば問題なさそうですね。 自分でも試せてないことがありましたので色々試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問