†でおきしブログ†

ウナギ食べたいヽ(•̀ω•́ )ゝ✧

【javascript】配列を[].concat(array)でコピーするとプロパティが消えるから$.extendを素直に使った方がよさげ

オブジェクトの代入は参照になってしまってイヤーンな感じになるので、
よくコピーをするわけですが、配列のコピーであれば、
jQueryの$.extendを使うよりも[].concat(array)の方がちょっと短くて使ってたのですけれど…

var array = [];
array.property = "property";

var hoge = $.extend(true,[],array);
var fuga = [].concat(array);

上記の[].concat(array)だとpropertyは欠落します。
配列にオプション使うケースってあまりないと思うけれどね。



ちなみにこうすればとりあえず回避できるけど、美しくないね。プロパティが複数あるとその分処理増えるし。

var fuga = [].concat(array);
fuga.property = array.property;

☆蛇足

jQueryのextendってどういう実装になってんのかな?と思って、

f:id:deokisikun:20180223224514j:plain

ダウンロードページ|jQuery

uncompressed版のjQueryをダウンロードして、chromeのdeveloperツールでブレークポイントからextendの処理を眺めてみた。

f:id:deokisikun:20180223224823j:plain
for...in使って、一個一個コピーしているようで、確かにこれならシャローコピー(参照コピー)にならず、実体コピーになるね。



…というか、jQueryの中身久しぶりに見たけど難しいコードという印象。
しかしながら、jQueryでも、反復させる変数に"i"とか使っていて、身近な感じがするね。