LoginSignup
7
4

More than 5 years have passed since last update.

JavaScriptのオブジェクトって難しすぎませんか…?

Last updated at Posted at 2018-09-12

たぶん書き方が悪いだけだと思いますが、不可解な現象に出くわしたのでメモ。

実装したコード

JavaScript
var API = API || {};
API.getRequestBody = function() {
    var body = {
      "customer" : {
        "companyName" : {
          "kanji" : Data.customer.companyName.kanji,
          "kana" : Data.customer.companyName.kana
        }
      }
    };

    return body;
}


var Data = Data || {};
Data.customer = {};
Data.customer.companyName = {};
Data.customer.companyName.kanji = '株式会社○○';
Data.customer.companyName.kana = 'カブシキガイシャマルマル';
console.log(Data);// 1


var body = API.getRequestBody();
console.log(body);// 2


var customer = {
  "companyName" : {
    "kanji" : 'あああああああああああああ',
    "kana" : 'いいいいいいいいいいいい'
  }
};
console.log(customer);// 3

customer.companyName.kanji = 'xxxxxxxxxxxxxxx';
customer.companyName.kana = 'yyyyyyyyyyyyyyy';
body.customer = customer;
console.log(body);// 4


var body = API.getRequestBody();
console.log(body);// 5

console.log()の出力結果

console.log()の後ろにコメントで番号を振ってあります。
それぞれの出力結果を御覧ください。

1

consoel.log()
customer : {
  companyName : {
    kana : "カブシキガイシャマルマル",
    kanji : "株式会社○○"
  }
}

まぁ、想定通りですね。

2

consoel.log()
customer : {
  companyName : {
    kana : "yyyyyyyyyyyyyyy",
    kanji : "xxxxxxxxxxxxxxx"
  }
}

えぇっ!?何で書き換わってるんですか?下の行はまだ実行されてませんよね??

3

consoel.log()
customer : {
  companyName : {
    kana : "yyyyyyyyyyyyyyy",
    kanji : "xxxxxxxxxxxxxxx"
  }
}

えぇっ!?変数宣言しただけなのに何で書き換わってるんですか??

4

consoel.log()
customer : {
  companyName : {
    kana : "yyyyyyyyyyyyyyy",
    kanji : "xxxxxxxxxxxxxxx"
  }
}

まぁ、想定通りですね。

5

consoel.log()
customer : {
  companyName : {
    kana : "カブシキガイシャマルマル",
    kanji : "株式会社○○"
  }
}

えぇっ!?何で戻っちゃったんですか??

まとめ

JavaScript難しすぎる…。

7
4
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4