definePropertiesというメソッドを調べていて、var x ={};
なら正常に動作して、var x;
だとエラーになって意味がわからず混乱しました。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答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総合スコア5545
0
var xを初期化しています。
javascript
1var name = 'John';
だと、文字列の定義ですが
javascript
1var x = {};
だとオブジェクトだよという宣言となります。このオブジェクトを使って、プロパティを設定したりできるというわけで数値型や文字列型と違う点です。
ちなみに、JavaScriptでは関数内のどこでもvarの宣言を書くことができます。
投稿2017/12/24 09:02
総合スコア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
総合スコア18166
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/26 13:17