2007年06月15日

Javascript:DOMオブジェクトかECMAオブジェクトかを判定する。

ドキュメントオブジェクトなのかスクリプトのオブジェクトなのか判定したい時って通常どうするのでしょう? typeof() ではどちらも "object" なのですが、実際のところ別物ですよね。(※1)

ということで、幾つか判定用関数を作成してみました。

・ Element かどうかの判定
要は、div とか span とかいったタグ物かどうか?です。

・ DOM Node かどうかの判定
attribute (id や value)、テキストは Element ではないんですが DOM Node を受け継ぐオブジェクトです。

・ ECMA object かどうかの判定
v = {apple : 'りんご'};
なんぞのオブジェクトを判定します。
ちなみにアトミックなもの。数値や文字列もオブジェクトである場合があります。そのような場合も真として検出します。

・ イベント object かどうかの判定

(※1) opera はかなり特殊です。Element をオブジェクトとして他のブラウザ以上に統一的に扱おうとしているようです。

確認環境
ie 6.0, 7.0
ff 1.5
ns 7.1
op 8.53

続きを読む
posted by HiFa at 14:08| 愛知 ??| Comment(3) | TrackBack(2) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする

2007年05月30日

Web:技術者の陥りやすい(?)商品力の評価ミス。

自身が技術屋なんで、ハマリまくっている事に気付くんですが、仕様的に的確にマッチしている商品やサービスであっても商品力としては片手落ちって事は多いですね。

「よし、コレを紹介するサービスを立ち上げて、対象業種に提供していこう。」なんて事になると、技術屋な自分は、商品やサービスの機能にしか目が向いていなかったりする。

アクセシビリティはどうだとか、ユーザビリティはどうだとか。目新しいとか、差別化だとか・・・。ニーズだとかウォンツだとか。ありがちだよなぁ。
でもそんなもんは実際のところ二の次だったりする。

コケる要因の一つに、提供先が使いこなせないってのがある。
で、考えるのは提供先サイドのユーザビリティの見直しとか、そんな事をやりだす。が、それ自体が根本的な間違いだったりする。
確かにそれも必要だけども、そこは根幹じゃない。

続きを読む
posted by HiFa at 11:53| 愛知 ??| Comment(0) | TrackBack(2) | よもやま | このブログの読者になる | 更新情報をチェックする

2007年05月19日

Javascript:replace へ関数を渡すと非常に遅くなる事がある

replace メソッドの色々な使い方を紹介した記事を幾つか見つけたんですが、これって場合によっては想定外な結果になるんじゃないかな。
該当場所を見つける度に関数のオーバーヘッドが掛かる訳ですから、テスト文字列によってパフォーマンスが著しく変わるハズではないかと。

以下参考に致しました。
「escapeHTML の実装 3 パターン (ベンチマーク付き)」
http://d.hatena.ne.jp/reinyannyan/20060711/
「激しく誤差の範囲内の予感」
http://d.hatena.ne.jp/f99aq/20060714/

ということでやってみた結果、それほど置換数が多くなくても ie に限ると10倍以上の差がでるようです。ff と op は有意義な差が無いです。

告白すると、replace で正規表現使ったり、関数を渡したりする事ができるなんて・・・。知りませんでした。

おいおい大丈夫かよってなもんで。
「問題なければすべて良し」的な対応をしてきた自分に激しく反省。これからもポロポロ垢が出てくるんだろーなぁ。

以下。テスト内容

続きを読む
posted by HiFa at 11:08| 愛知 ??| Comment(0) | TrackBack(0) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする

2007年05月17日

Javascript:エレメントの位置をコロコロと変える。

DOM element をスワップさせたり、最前部や最後部に移動させたりする関数群です。ま、簡単に出来ますし、大したコードでもないのですが、微妙に面白いw

・ 一つずつ上に移動
・ 一つずつ下に移動
・ 指定要素の最前部に移動
・ 指定要素の最後部に移動
・ 要素の入れ替え

のそれぞれの関数があります。

確認環境
ie 6.0, 7.0
ff 1.5
ns 7.1
op 8.53
メイン環境じゃ無いので少ない・・・。

続きを読む
posted by HiFa at 15:41| 愛知 ??| Comment(0) | TrackBack(0) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする

2007年05月01日

javascript:厳密なイコール

ぜんっぜん、知らなかったんですが「===」が、ECMA では規定されています。
=== と == に関してちょこちょこっと。

今更何を言っとるんだ状態ですが、javascript === 曖昧 (笑)という図式が私ん中で出来上がっちゃってまして「そんなものはない」と信じ込んでたんですね。
Javascript を扱ってるサイトでも見かけませんよね。(というか気付かなかった)

正直、ECMAscript, DOM, javascript って何が何やら境界がよく分からん。Javascript や action script などが ECMAScript 準拠って事ぐらい。
ま、プロジェクト管理者の中ですら Ajax = javascript なんて人も居るんで、ま、分かり辛いって事で締めとくか。

以下、意外だった人には意外な事w

続きを読む
posted by HiFa at 13:53| 愛知 ??| Comment(0) | TrackBack(0) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする

2007年02月28日

Ajax:画像を取得して表示する(Firefox)

XMLHttpRequest を使って取得したバイナリーデータ(画像)をブラウザに表示してみました。firefox のみ。
JavaScriptでバイナリを扱う &
 XPCOMを使ってローカルのデータベースにアクセス with Firefox

の記事を読んでいて、そういや Ajax ではどうなん?と思ってやってみた。

■ 他に参考にしたのは以下の記事。
[comp]JavaScriptでバイナリファイルの中身にアクセスできた

■ base64 エンコードには下記のコードを使いました。
JavaScript で Base64 の符号化と復号化
続きを読む
posted by HiFa at 02:44| 愛知 ??| Comment(0) | TrackBack(0) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする

2007年02月26日

Javascript:if などの制御構文を使わない分岐

if などの制御構文を使わなくても分岐ができます。実際、当たり前の話なんですが、意図的に行うかどうかという、ただそれだけの違いです。

続きを読む
posted by HiFa at 13:06| 愛知 ??| Comment(0) | TrackBack(0) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする

2007年02月25日

Javascript:for のちょっと変わった使い方

for(var i = 0; i < 10; i++){処理・・・}
for(var i in object){処理・・・}

なんてのは、よく目にしますが・・・。

for(var i = ['あ', 'い', 'う']; i[0]; i.shift()){ alert(i[0]); }
これでも。i に配列を代入して、i[0] が false を返すようなものではない間、shift で i に代入された配列を削っていきます。ということで、この場合は、あ、い、う、と表示される。

当然。もっと自由に考えれば。
var o = {
  v : 2,
  fn : function (){this.v = this.v * 2},
  en : function (){
    if(this.v < 10) return true;
    alert(this.v);
  }
};
for(; o.en(); o.fn()){}
なんてのも。
わざわざこんな処理に冗長な例ですが・・・。for 内の処理や条件を外部で、作成・変更できたりと、結構自由に使えます。ただ。やり過ぎると、深刻な混乱を招いたりするので、誰が見ても分かりやすい物にした方が無難かも。

私は遊びで使ったりします。ひょっとしたら嫌う人もいるかもしれない。
posted by HiFa at 03:01| 愛知 ??| Comment(2) | TrackBack(0) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする

2007年02月21日

Javascript:Array オブジェクトの継承では length が予期しない値を返す

02/22 後尾に追記

アルファブロガー達※1が、一時取り上げていた3行の継承に関してですが、これで Array オブジェクトを複製しても組み込み済みのメソッドは、継承元でしか動作しないですね。

■ 試した関数
404 Blog Not Found さんより
javascript - プロトタイプ的継承

function object(o){
  function F(){}
 F.prototype = o;
 return new F();
}

※1 私だけの認識じゃないと思う。

続きを読む
posted by HiFa at 16:02| 愛知 ??| Comment(0) | TrackBack(0) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする

2007年02月17日

Javascript:setTimeout による呼び出しは関数終了時ではない?

予定された時間になり、その時実行中の関数が終了すれば setTimeout/setInterval での呼び出しが実行されるという訳じゃないんですよね。

ネットでたまに見かけるのは、「function fn(){setTimeout(cb, 20); ・・・;} の場合、・・・の処理が終わって fn(); が終了していないと、20msec 経過しても cb は呼び出されない」などの内容で完結していることがありますが、実際は fn(); が終了していても呼び出されないことがあります。

ま。とある記事読んでいて、あれれ?と思ったので・・・。というか、自分自身も意識しないとそう言ってる。

続きを読む
posted by HiFa at 09:35| 愛知 ??| Comment(0) | TrackBack(0) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする