トップページ > プログラム > 2015年01月30日 > IkeovF4a

書き込み順位&時間帯一覧

1 位/222 ID中時間01234567891011121314151617181920212223Total
書き込み数2100000000000100100101119



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
+ JavaScript の質問用スレッド vol.117 +

書き込みレス一覧

+ JavaScript の質問用スレッド vol.117 +
727 :デフォルトの名無しさん[sage]:2015/01/30(金) 00:41:34.96 ID:IkeovF4a
>>725
> 長いプログラミングの歴史の中で共通認識として形成されたんだと思う
そういう曖昧な共通認識なら「連想配列」を定義することは出来ないんじゃないかな

>>726
PHP以外の言語って具体的には何?
そのPHP以外の言語の連想配列が「全言語共通の連想配列」を表しているとどうしていえる?
+ JavaScript の質問用スレッド vol.117 +
728 :デフォルトの名無しさん[sage]:2015/01/30(金) 00:46:36.15 ID:IkeovF4a
いってみれば、「JavaScriptにクラスがない」っていうのと同じだよ
仕様的にはクラスも連想配列もない
でも、クラスや連想配列の性質を部分的には持っている
それだけの話
+ JavaScript の質問用スレッド vol.117 +
731 :デフォルトの名無しさん[sage]:2015/01/30(金) 01:43:21.59 ID:IkeovF4a
>>729
確かに…、>>728は正確ではなかったね
正確には「でも、PHPのクラスや連想配列の性質を部分的には持っている」になる
"PHP" は例であって "Perl" などの別言語が入ってもいい
+ JavaScript の質問用スレッド vol.117 +
738 :デフォルトの名無しさん[sage]:2015/01/30(金) 13:32:55.83 ID:IkeovF4a
>>735,737
別に英語でもいいけど、ソースは?
+ JavaScript の質問用スレッド vol.117 +
744 :デフォルトの名無しさん[sage]:2015/01/30(金) 16:43:26.51 ID:IkeovF4a
>>739
ごめん、よく読んでなかった
>>726は>>685定義の連想配列に対する反論だね
趣旨としては異論はないんだけど、「PHPにlengthがない」は count 関数が length 相当の機能なんじゃないかと思う
http://php.net/manual/ja/function.count.php
+ JavaScript の質問用スレッド vol.117 +
748 :デフォルトの名無しさん[sage]:2015/01/30(金) 19:37:09.68 ID:IkeovF4a
オブジェクト初期化子でオブジェクトを定義した場合、prototype-chain という名のコンテナになるって事が他言語の連想配列との違いかな

var obj = {};
console.log(obj.valueOf); // function valueOf() { [native code] }

{} は Object のインスタンスだから prototype-chain の原則に従って Object.prototype.valueOf を参照してしまう
これを回避するためには ES5 の Object.create を使用する必要がある
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/create

var obj = Object.create(null);
console.log(obj.valueOf); // undefined

ES6 の Map でも同様に解決できる
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Map

>>747
Object.keys(person).length ではなくて?
+ JavaScript の質問用スレッド vol.117 +
757 :デフォルトの名無しさん[sage]:2015/01/30(金) 21:26:37.35 ID:IkeovF4a
>>756
> Mapをサポートしているブラウザであっても標準のMapは使われない。
試せば分かると思うけど、標準で Map を実装しているブラウザでは native code が使われるよ
巻き上げが発生するからこそ正しく動作する
まあ、自分なら typeof 演算子で function 判定するけど
+ JavaScript の質問用スレッド vol.117 +
761 :デフォルトの名無しさん[sage]:2015/01/30(金) 22:54:01.72 ID:IkeovF4a
>>760
> ただやっぱり変数の巻き上げに頼るコードは、可読性の面でやはり良くない気がするな
それには同意
自分ならこうする

if (typeof Map !== 'function') {
var Map = function Map () {};
// 以下略
}
+ JavaScript の質問用スレッド vol.117 +
763 :デフォルトの名無しさん[sage]:2015/01/30(金) 23:52:28.10 ID:IkeovF4a
>>762
期待通りに動くのだからそれ程強く主張するつもりはないよ(ポリシーの違いだし)
下記は結構気になる点ではあるけど
・size が書き換え可能
・hash を直接参照可能
・has は hasOwnProperty の方がいいかも (※現コードでも問題はないけど、prototypeを辿る必要はないかと)


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。