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

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

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

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

Q&A

解決済

3回答

1372閲覧

javascriptで「var x ={};」ってどういう意味なのでしょうか。

yamagata_user

総合スコア40

JavaScript

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

0グッド

0クリップ

投稿2017/12/24 02:37

definePropertiesというメソッドを調べていて、var x ={};なら正常に動作して、var x;だとエラーになって意味がわからず混乱しました。

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

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

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

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

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

guest

回答3

0

オブジェクト初期化子ですね
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Object_initializer

どこでエラーになるか書いてないのでわかりませんが、プロパティアクセスしてるのではと思います

JavaScript

1var x = {}; 2x.aa; // undefinedになる

はエラーにはなりません

JavaScript

1var x; 2x.aa; // <-ここでエラーになる

Uncaught TypeError: Cannot read property 'aa' of undefined
at <anonymous>:1:3
とエラーになります

投稿2017/12/24 02:57

編集2017/12/25 05:50
rururu3

総合スコア5545

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

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

yamagata_user

2018/04/26 13:17

遅くなりすみません! ありがとうございます。
guest

0

var xを初期化しています。

javascript

1var name = 'John';

だと、文字列の定義ですが

javascript

1var x = {};

だとオブジェクトだよという宣言となります。このオブジェクトを使って、プロパティを設定したりできるというわけで数値型や文字列型と違う点です。

ちなみに、JavaScriptでは関数内のどこでもvarの宣言を書くことができます。

投稿2017/12/24 09:02

imamoto_browser

総合スコア1161

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

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

0

ベストアンサー

Object.defineProperties

Object.defineProperties とはオブジェクトにプロパティを定義する関数です。

JavaScript

1var x = {}; 2Object.defineProperties(x, {value: {get: function () { return 1; }}}); 3 4console.log(x.value); // 1

var x; に変更すると、下記のようにエラーが発生します。

JavaScript

1var x; 2Object.defineProperties(x, {value: {get: function () { return 1; }}}); // TypeError: Object.defineProperties called on non-object

ここでエラーメッセージを読めば、何が原因かわかります。

エラーメッセージ日本語訳
「型エラー: "オブジェクトではないもの" からObject.definePropertiesが呼び出されました」

変数 x には Undefined 型の値が格納されており、Object.defineProperties は「オブジェクトではないもの(Object 型ではないもの)」にプロパティを定義する事が出来ません

オブジェクト初期化子

{} を「オブジェクト初期化子」と呼び、構文名から「オブジェクトリテラル」と呼ばれることもあります。
新しい構文規則を使うと、先で紹介した getter/setter もオブジェクト初期化子の構文内で定義する事が出来ます。

JavaScript

1var x = {get value () { return 1; }}; 2 3console.log(x.value); // 1

※ただし、オブジェクト初期化子で configurable, enumerable, writable を定義する事は不可能なので、Object.defineProperties を全く使わなくて済むようになったわけではありません。

jQuery を使っても JavaScript を理解する必要がある

下記スレッドで「jQuery自体がjavascriptがわからないプログラミングのできない人でもwebサイトでいろいろな機能を実現できることを売りにしているように私は感じている」と質問者さんが書かれていましたが、そんなことはありません。

「オブジェクト初期化子」や Object.defineProperties は「jQuery では実現できない JavaScript の基礎となる機能」であり、習得している必要があります。

Re: yamagata_user さん

投稿2017/12/25 06:57

think49

総合スコア18166

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

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

yamagata_user

2018/04/26 13:16

遅くなってしまいすみません! このたびは誠にありがとうございました。
yamagata_user

2018/04/26 13:16

遅くなってしまいすみません! このたびは誠にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問