Rain技術情報などを不定期で投稿していきます。まとめディープコピーとはオブジェクトの内部まで全て値を伴ってコピーすることです。"Charlie"]}非常に単純な話で、JSONオブジェクトはシリアライズ可能なので、シリアライズしてからデシリアライズすれば凄く簡単にオブジェクトのディープコピーが作れます。これは別の言語でも同様で、JavaならSerializableインターフェースを実装していれば、適したメソッドを使うことで同じことが可能です。問題点この方法の問題は、先に述べたようなStringや配列、Numberなどの独自リテラルを持つオブジェクトにしか使えない、ということです。Dateオブジェクトや、jQueryオブジェクト、BigNumber.jsなどの拡張されたオブジェクトには一切使えません。これらはDOM要素を直接、参照として持っていたりするので、ライブラリの深いところまで知り尽くしていないと軽々しくコピー出来ないわけです。これは大した問題にはなりません。いったオブジェクトをディープコピーする必要は殆どありませんし、また、そういったことが必要なライブラリにはコピーする手段が必ず用意されているからです。一般的なオブジェクト以外は汎用的にディープコピーできないのか?今後、いくつかの新たな仕様が検討され、実装されるまで現実的にそれを行う手段はありません。オブジェクトの中身をfor文などで個別に検証し、オブジェクトごとに異なる処理を実行させるような、ごく限定的な処理を書くくらいしか方法はありません。しても上記で挙げたような特殊なオブジェクトをディープコピーしたい方は、今後のESの拡張に期待するしかありませんが、設計を見直したり独自メソッドを書いた方がいくらか早そうですね...。まとめ一般的なJSONオブジェクトであれば、この方法で十分要件を満たすことができますし、処理負荷も無視できる程度です。何よりシンプルなので、バグの入り込む余地が限られていることが大きな利点です。シンプルな実装で、読みやすく美しいコードを書きたいものですね。ECMA-262標準で追加されたメソッドで、for文を書かなくても、Arrayの要素すべてに対してcal...記事を読む【JavaScript】コーディング規約の文字列リテラルのクオートはどれを採択すべきかJavaScriptでは文字列リテラルに様々な書き方ができますが、今回はどれが優れているかについて考えてみます。JavaScriptでは、thisという特殊なオブジェクトがあります。例を挙げてみましょう。...記事を読む【JavaScript】文字列中に文字列が含まれているかを検査するJavaScriptの最新のメソッドで、文字列中に文字列が含まれているかどうかを検索する方法をご紹介します。非同期処理を実装するにあたって避けては通れないPromiseと、ES2017からの非同期処理の新しい書き方であるasync/awaitにつ...記事を読むjQuery不要論について考えるjQueryは、長らくWeb開発の現場に君臨し、その発展を助けてきたJavaScriptフレームワークです。1.0.0をリリースしました。JavaScriptのO...記事を読む【JavaScript】ES2015(ES6)のGenerator関数を試すES2015から実装されたGeneratorという機能について実際に試しながら解説します。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。