- + 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を辿る必要はないかと)
|