JavaScript オブジェクト 新しいページはコチラ
提供: yonewiki
(→.isSealed 関数) |
(→.is 関数 ☆Edge) |
||
2,242行: | 2,242行: | ||
== .is 関数 ☆Edge == | == .is 関数 ☆Edge == | ||
− | * | + | *Object.is(obj000, obj111) |
− | : | + | :上記のようにするとオブジェクトや変数同士の比較ができます。プロパティ値の構造や値が同じであるかをチェックしてくれます。同じオブジェクトであることも重要です。まったく同じ構造でも、分けて定義してあるとどうやっても比較結果はtrueにはなりません。自分で全く同じ構造のオブジェクトを定義してしまった場合とかに比較はうまくいかないことに注意が必要です。サンプルではそのことがわかるようなサンプルにしました。ちなみにIEでは対応していない新技術でEdgeでしか使えないので、今のところ、大きなシェアのもとで動かすスクリプトを組むという観点である場合、あまり実用性はありません。企業なんかで、Edgeや違うブラウザを使うことを前提としているような拘束的なアプリケーションを組むときに活用できると考えていいと思います。自分はシェア80%くらいまでのブラウザで使える技術しか導入しない性分ですので、こういうのを使えるようになるのは、ずいぶんと未来の時代になるまで待たないとだめっぽいです。あとの20%は見殺しにするのかお前は?という意見あるかもしれませんが、そうです。見殺しです。なんなら早く違うブラウザ使えってことを意味するお仕置き程度にも捉えて技術の利用を決断します。その判断を自分自身でするというだけのことです。誰に対して自分の情報を見てほしいか?自分の作った技術を提供したいか?誰かに提供する場合でもそういった判断をします。企業内で作る場合の方が拘束力が高いので新技術の導入は早いですが、大きな会社の場合だと、事業所毎の方針とかも調査したりとかが必要になるのかもしれません。そして、どの事業所に展開されても、あまり支障がないようにしたいとそういう風に考えると思います。調べるのって大変ですが、事前調査って意外と大事です。発注された場合はもっと拘束力が高くなって、そういう注文だったのでそのまま作りましたと言い訳はできますが、無為にダメなスクリプトを作りたくないのでそのあたりは、相談しながら、互いが合意できる着地点を決めます。もめ事がおこるのは嫌です。私は職業プログラマではないので、そういう交渉をする感じです。職業プログラマならいわれたとおりドライなプログラミングをしなければならない苦悩があったりするのかもしれませんね。その辺の事情は実際に職業プログラマの方のサイトで意見を聞いてみてください。2ちゃんねるとかでも、ある程度事情がわかる場合があります。いろんな会社があるんですよ。きっと。 |
サンプル | サンプル | ||
<syntaxhighlight lang="javascript" line start="1"> | <syntaxhighlight lang="javascript" line start="1"> | ||
+ | <HTML> | ||
+ | <HEAD> | ||
+ | <TITLE>JavaScript is</TITLE> | ||
+ | </HEAD> | ||
+ | <BODY> | ||
+ | JavaScript is<br /> | ||
+ | <SCRIPT Language="JavaScript"> | ||
+ | <!-- | ||
+ | var obj000 = { | ||
+ | x000:{ | ||
+ | value:"data000", | ||
+ | } | ||
+ | }; | ||
+ | var obj000copy = obj000; | ||
+ | var obj111copy = obj000; | ||
+ | var obj000_2 = { | ||
+ | x000:{ | ||
+ | value:"data000", | ||
+ | } | ||
+ | }; | ||
+ | |||
+ | var obj111 = { | ||
+ | x111:{ | ||
+ | value:"data111", | ||
+ | } | ||
+ | }; | ||
+ | var obj000_data000 = { | ||
+ | x000:{ | ||
+ | value:"data000", | ||
+ | } | ||
+ | }; | ||
+ | var obj111_data000 = { | ||
+ | x000:{ | ||
+ | value:"data000", | ||
+ | } | ||
+ | }; | ||
+ | |||
+ | var obj000_data000_x2 = { | ||
+ | x000:{ | ||
+ | value:"data000", | ||
+ | } | ||
+ | }; | ||
+ | var obj000_data000_x1 = { | ||
+ | x000:{ | ||
+ | value:"data000", | ||
+ | } | ||
+ | }; | ||
+ | var obj111copy_data000 = obj111; | ||
+ | |||
+ | Object.defineProperty(obj111copy_data000, "x000", { | ||
+ | value: "data000", | ||
+ | writable: true, | ||
+ | enumerable: true, | ||
+ | configurable: true | ||
+ | }); | ||
+ | Object.defineProperty(obj111copy, "x000", { | ||
+ | value: "data000", | ||
+ | writable: true, | ||
+ | enumerable: true, | ||
+ | configurable: true | ||
+ | }); | ||
+ | Object.defineProperty(obj000copy, "x000", { | ||
+ | value: "data000", | ||
+ | writable: false, | ||
+ | enumerable: false, | ||
+ | configurable: false | ||
+ | }); | ||
+ | |||
+ | Object.defineProperty(obj000_2, "x000", { | ||
+ | value: "data000", | ||
+ | writable: false, | ||
+ | enumerable: false, | ||
+ | configurable: false | ||
+ | }); | ||
+ | Object.defineProperty(obj000_data000_x1, "x1", { | ||
+ | value: "data000", | ||
+ | writable: false, | ||
+ | enumerable: false, | ||
+ | configurable: false | ||
+ | }); | ||
+ | Object.defineProperty(obj000_data000_x2, "x2", { | ||
+ | value: "data000", | ||
+ | writable: false, | ||
+ | enumerable: false, | ||
+ | configurable: false | ||
+ | }); | ||
+ | |||
+ | Object.defineProperty(obj000_data000, "x000", { | ||
+ | value: "data000", | ||
+ | writable: false, | ||
+ | enumerable: false, | ||
+ | configurable: false | ||
+ | }); | ||
+ | Object.defineProperty(obj111_data000, "x000", { | ||
+ | value: "data000", | ||
+ | writable: true, | ||
+ | enumerable: true, | ||
+ | configurable: true | ||
+ | }); | ||
+ | |||
+ | Object.defineProperty(obj000, "x000", { | ||
+ | value: "data000", | ||
+ | writable: false, | ||
+ | enumerable: false, | ||
+ | configurable: false | ||
+ | }); | ||
+ | |||
+ | Object.defineProperty(obj111, "x111", { | ||
+ | value: "data111", | ||
+ | writable: true, | ||
+ | enumerable: true, | ||
+ | configurable: true | ||
+ | }); | ||
+ | |||
+ | |||
+ | document.write("■is比較 obj000 vs obj111<BR />"); | ||
+ | document.write(Object.is(obj000, obj111),"<BR />"); | ||
+ | |||
+ | document.write("■is比較 obj000_data000 vs obj111_data000<BR />"); | ||
+ | document.write(Object.is(obj000_data000, obj111_data000),"<BR />"); | ||
+ | |||
+ | document.write("■is比較 obj000_data000_x1 vs obj000_data000_x2<BR />"); | ||
+ | document.write(Object.is(obj000_data000_x1, obj000_data000_x2),"<BR />"); | ||
+ | |||
+ | document.write("■is比較 obj000 vs obj000_2<BR />"); | ||
+ | document.write(Object.is(obj000, obj000_2),"<BR />"); | ||
+ | |||
+ | document.write("■is比較 obj000 vs obj000copy<BR />"); | ||
+ | document.write(Object.is(obj000, obj000copy),"<BR />"); | ||
+ | |||
+ | document.write("■is比較 obj000 vs obj111copy<BR />"); | ||
+ | document.write(Object.is(obj000, obj111copy),"<BR />"); | ||
+ | |||
+ | document.write("■is比較 obj000 vs obj111copy_data000<BR />"); | ||
+ | document.write(Object.is(obj000, obj111copy_data000),"<BR />"); | ||
+ | --> | ||
+ | </SCRIPT> | ||
+ | </BODY> | ||
+ | </HTML> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
[[Media:JavaScript Object is.html|実行結果サンプル]] | [[Media:JavaScript Object is.html|実行結果サンプル]] |