ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

JavaScriptコミュのJavaScriptの奇妙な動作について語るスレ

  • mixiチェック
  • このエントリーをはてなブックマークに追加
直感に反する結果やよくわからない動作を見つけた時に書くスレ。

コメント(24)

まずはなんといってもあれですよ、==演算子と ? ! 演算子の違い。

http://tate.undef.jp/qi2/test-js/test-js.html

・[] と '0' は真偽コンテキストでの評価とtrue,falseとの比較にズレがある。

・1以外の数値に解釈できる数値や文字列はtrueと同値ではない。falseと同値でもない。

・配列オブジェクトと数値との比較は、配列の要素数ではなく配列をjoin(',')した文字列との比較になる。

マルチリンガルプログラマーとしては、こういった微妙な部分での他言語との挙動の違いは押さえておきたいところ。
IEの奇妙な動作ならたくさんありますよ。
言語仕様が奇妙なのと実装が奇妙なのとは混同しないほうがいいと思います。
JavaScriptを3日前に始めた初心者なのですが、
さっそくひとつ言わせてください。

先日、スクリプトを書きました。
すると、理解できないエラーが出て、いろいろやっているうちに、
どうもコメントが悪いということが分かりました。

通常、コメントを書くときは、
// か /* */ で書くと思うのですが、
このままコメントを書くとエラーに。

ところが、そうやってコメントを書いた行末に、
「;」を1つ入れてみたのです。
すると、すんなりとスクリプトが動くようになったのです。

//このようなかんじで;


こういうことを書けばいいんでしょうか(´・ω・`)?
ブラウザが文字コードを特定できずに、全角入りのコメントの末尾が見えていないケースではないかと。
おお、そういうことだったんですか('Д')!
じゃあやっぱり、末尾に「;」は
おまじないとしてでもあった方がいいんですね……。

ご回答ありがとうございました。
いや、そうではないかという程度ですよ。
それに、もしそうであれば、そんな「おまじない」なんぞなくてもブラウザが判別できるように、コードを指定してあげるのが第一です。
mshtml.dll 7.0 のIE (純正IE7) と Trident9以降 の互換表示で pngFix系 の表示が変わるの…か?
ここら辺実験したサイトとか無いですかねぇ…

VM全部回して確認するしか無いのか…めんどい。
>>[8] さん その件教科書に乗ってて、理解が進んでないとこです。。プログラマー出身でもないし、専門でもないのでなんとも言えないものもありますけれども。
>>[9] 表示の問題はブラウザ間の言語解釈に整合性がとれてない状況がずっと続いてます。フロントエンドの現場ではjsは表示系の不整合を吸収するプラグインを使ってから書くのが一般的になってます。
>>[11]
それは、IEのレンダリングエンジンとモードの判別(IE10のIE7互換モード、IE8のIE7互換モード、IE7ネイティブ等...)が可能ってことですかね?
それぞれで、css filter 掛けた時の挙動が変わるので、困っていました。
>>[11]
えぇと、私のレベルでは、動作や機能の解析で判別する位しか思いつかないのですが、あっていますでしょうか?
とりあえず、標準DOMのプロパティ総当り辺りから始めようと思います。
>>[13] 一応主流なのはjqueryってやつで無料で配布されてて、それを解析しないと原理からは私の知識では理解できません。独自の語法があってCSSの理解が必須なので、それを直接そちらの現場で活用できない事情は承知しておりますが。。
それとCSSの適用自体にも表示上の誤差がでます。IE7までが必要なら切り分けるか、現場で工夫したりとかそういうことが必要です。
ですから、その表示上の不具合をひとまずプログラム自体のバグとみなして、ひとつひとつ当たるのは一番遅いようで早道です。
あと単にレイアウトする場合はDOMを2種類に分けます
インライン要素とブロック要素です。これの理解が進むと一気に好転します。私の場合そうでした。
>>[17]
jQueryとも関係してきますが、IE7・8はfilterで透過PNG貼り付けないとopacity弄った際に半透明部分が黒くなると思います。
それで、filter掛けるのですが、filterには画像の位置指定がないので、現在のコンテナをoverflow:hidden;にして、子コンテナを作成し、それにfilterを掛けるなどする事になります。

すると今度は、IE9・10・11のIE7互換モードは実際にはPNG処理のライブラリはそれぞれのエンジンのものらしく、表示が崩れます(変なzoomが入ったり、1pxズレる)。

結果、それぞれのエンジンを判定する手段が必要になっており(最悪、レンダリングモードはdocument.documentModeを信用することにします)、頭を悩ませているわけです。

現状、Modernizrのopacityで判別して代替画像にしているのですが…
更新の手間を考えると、同じ画像を使いたいところなのです。
>>[18] その動作はその通りです。それで切り分けたりするんですけど、意外なところに知恵があって、透明といっても色を変化させてるにすぎないとみなせば、透過処理というより視覚的に適切な色彩に色みの変更という手段がとれる場合があります。。
参考になりますでしょうか?
これは昔のイラストレータなんかはアプリにしても透過がなかったので、視覚的に透明に見える色彩の組み合わせなんて知っていたんです。今は結果をツールで判定して戻せば適応できます。
>>[20]
背景が静的な場合は、その通りだと思います。
ただ、今回は背景が動的なので、opacityで合成するしか無い感じです。

現在、HTTPのオーバーヘッド無視した上記の実装で動作はしているのですが、今月予想されるイベントのピーク時のPV(1万/時)を考えると、できるだけオーバーヘッドは減らしたいというだけなので。
>>[21] なるほど最後削る作業ですねーそういう意味じゃちょうど同じようなことやってます。それ以上は私の知識では及びませんので。最後にエールだけ送らせていただきます。(/・ω・)/
>>[22]
エールありがとうございます。
現在、pngFix周りを独自のjQueryプラグインとして実装しようと試行錯誤している感じです。

お互い、頑張って行きましょう。
はい。回していかないといけないのは現実ですものね。。そこから逃げないこと確認させていただきました。m(__)m

ログインすると、残り1件のコメントが見れるよ

mixiユーザー
ログインしてコメントしよう!

JavaScript 更新情報

JavaScriptのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。