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

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

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

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

3回答

1358閲覧

javascriptの名前空間について

k-teratail

総合スコア17

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2022/02/18 12:37

編集2022/02/20 13:40

javascriptの名前空間についてご教示いただきたいです。
javascriptにも名前空間があると知り、調べてみたのですが、ソースは出てくるのですが実際に何をしているのかが分かりませんでした。
初心者で調べながら書いていますので認識が違いましたら教えていただけますでしょうか。

①1行目では、『aaa』が定義されているかどうかを確認?
②2行目では、もし定義されていなかったら定義する?
③『var aaa = {}』の『{}』これが定義ということなのでしょうか?

if(typeof aaa === "undefind"){ var aaa = {} }

もう一点、『aaa.bbb』の場合は『var aaa.bbb』にはならないみたいなのですが、なぜなのでしょうか?

if(typeof aaa === "undefind"){ var aaa = {} } if(typeof aaa === "undefind"){ aaa.bbb = {} }

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

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

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

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

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

k-teratail

2022/02/20 13:40

ご指摘ありがとうございます。修正いたしました。
guest

回答3

0

ベストアンサー

typeof演算子

①1行目では、『aaa』が定義されているかどうかを確認?
②2行目では、もし定義されていなかったら定義する?
③『var aaa = {}』の『{}』これが定義ということなのでしょうか?

JavaScript

1if (typeof aaa === "undefind") { 2 var aaa = {} 3}

typeof aaa === "undefind" が成立する状況はほぼありません。
typeof演算子が "undefind" を返す実装は私の知る限りではありませんが、仕様上はObject型になり、この文字列を返す実装が存在する可能性はあります。

typeof aaa === "undefined" ならば、「変数 aaa が未定義」もしくは「変数 aaa の値が undefined」である場合に true を返します。
従って、変数 aaa が定義済であっても true になりえます。
ただし、定義済み変数との衝突が許されるには、var文で変数定義している場合であり、let/constでは多重定義が許可されません。

HTML

1<script> 2'use strict'; 3var foo; 4 5if (typeof foo === "undefined") { 6 var foo = {} 7} 8console.log(foo); // {} 9</script> 10<script> 11'use strict'; 12let bar; // SyntaxError: Identifier 'bar' has already been declared 13 14if (typeof bar === "undefind") { 15 var bar = {} 16} 17console.log(bar); 18</script>

変数定義は「変数文」で実行されます。

プロパティアクセサ

もう一点、『aaa.bbb』の場合は『var aaa.bbb』にはならないみたいなのですが、なぜなのでしょうか?

javascript

1if(typeof aaa === "undefind"){ 2 var aaa = {} 3} 4if(typeof aaa === "undefind"){ 5 aaa.bbb = {} 6}

プロパティを参照するには、当該プロパティを格納可能なオブジェクトが変数定義されていなければなりません。
aaaという名前の変数が存在しなければ、aaa.bbb のプロパティ参照は失敗します。
var aaa.bbb は「変数 aaa.bbbを定義する」という意味になり、変数名に"."を含めることはできない為、失敗します。

変数定義文の中で特定のプロパティを持つオブジェクトを定義することは可能です。

javascript

1var aaa = {bbb:{}};

Re: k-teratail さん

投稿2022/02/19 09:47

編集2022/02/19 09:54
think49

総合スコア18194

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

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

k-teratail

2022/02/20 13:44

ご回答ありがとうございます!
guest

0

③『var aaa = {}』の『{}』これが定義ということなのでしょうか? NO。変数に初期値を入れて宣言すること(『var aaa = {}』)が定義だと思います。
もう一点、『aaa.bbb』の場合は『var aaa.bbb』にはならないみたいなのですが、なぜなのでしょうか? 言語の設計者が仕様を自由に決められます。なぜそうしたのかはJavaScriptを作った人に聞かないと分かりません。あなたが『var aaa.bbb』という設計でJavaScript2という言語を作ってもいいでしょう。

投稿2022/02/19 07:47

querykuma

総合スコア777

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

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

0

JSに名前空間はない。

大昔のJSで名前空間っぽいことを実現するために強引に使われてた方法なので現代では一切覚えなくていい。

今のJSで名前空間はimportの文脈で使われる。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/import

投稿2022/02/18 13:34

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問