javascript

String 型とか参照型とか

js> new String("hoge") == new String("hoge") false js> "hoge" instanceof String false js> String("hoge") instanceof String false js> "hoge".constructor function String() { [native code] } js> (new String("hoge")) instanceof String true js>…

1.8

function sum(a) function(b) function(c) a + b + c; sum(1)(2)(3) // 6

null と 0 の比較

null値の扱いの不思議 - hogehoge @teramako より。 null > 0は 11.8.5 抽象的関係比較アルゴリズム (The Abstract Relational Comparison Algorithm) によると null が 0 になって 0 > 0 // falsenull >= 0も同じく 0 >= 0 // truenull == 0 // falseは、11…

JavaScript 読書会 復習 & 感想

前回に引き続き参加してきた。 ライトニングトーク JSDeffered: 使うよ。書き方面白いね。 Haskell: もう一度挑戦してみるよ。 無限ループ: jsThread も使ってみるよ。 読書 6 章から 7.4まで case ラベルに式を記述できるよ。 for 文の 初期化には var文だ…

Kanasan.JS JavaScript第5版読書会#2 終了後

http://del.icio.us/higeorange/js%3Areading%2B%232 で関連エントリを補足していきます。 私のエントリは後ほど。明日じゅうには書く。 あぁあと、参加したと思われる人の Blog & Twitter リスト ブログリスト twitter リスト lingr のログからごにょったの…

配列に含まれてるかどうか

以前 for ループで調べていたけど、join して indexOf してみるのはどうかと。 Array.prototype.contains = function(o) { var sep = /*配列の各要素と探すものに含まれていない文字列*/ return (sep + this.join(sep) + sep).indexOf(sep + o + sep) >= 0; }…

読書会予習

ちょっとどこまでやったか忘れたので 4章から js> +"300" 300 js> typeof +"300" number js> +"300hoge" NaN js> typeof +"300hoge" number js> typeof NaN // NaN は値の定まらない数値 number js> "ab" < "bc" true js> "ab" < "abc" true js> "ab" < 3 fa…

Kanasan.JS JavaScript第5版読書会#2

前回に続き参加することにした。 amachang がくるらしい。 id:tomoya さんとか渡辺さんとか芦塚さんとか一緒にどうっすか?と、さりげなく誘ってみるテスト。

文字列繰り返し

String.prototype.repeat = function(n, sep) { this.n = this.n + 1 || 1 if(this.n >= n) return this; return this + (sep || "") + arguments.callee.call(this, n, sep); } print("hoge".repeat(3, '+')) // hoge+hoge+hoge print("fuga".repeat(4, '-'…

配列足し算いろいろ

普通に for Array.prototype.sum_for = function() { var r = 0; for(var i = 0, l = this.length; i < l; i++) { r += this[i]; } return r; } while pop Array.prototype.sum_while = function() { var r = 0; var f; while(f = this.pop()) { r += f; } r…

誰が使うんだろうかこれ?

function $$(sel) { var self = this; var type = /^#(\w+)$|^\/\/(.*?)$|^\.(\w+)$|^(\w+)$/; sel.replace(type, function($0, $1, $2, $3, $4) { if($1) { self.elm = []; self.elm.push(document.getElementById(sel.replace('#', ''))) } else if($2) { …

innerHTML

HTMLタグ が Firefox -> 小文字で。 Opera, Konqueror -> 大文字で。 Konqueror って document.evaluate ないのか…。

JavaScript第5版読書会#1

http://cotocoto.jp/event/2880 に参加してきた。 気になったコード js> "hoge".charAt(1) o js> "hoge"[1] o // 実装によってはうごかないらしい。 new String() vs. String() js> typeof("hoge") string js> typeof(String("hoge")) string js> typeof(new…

for + setTimeout

10まで を数える。 for(var i = 1; i <= 10; i++) { setTimeout(function() { print(i); }, i * 1000); } いっけん間違ってなさそうだけど 11 しか表示されない。タイムアウト後はすでにループを抜けて i は 11 になってるため。 for(var i = 1; i <= 10; i+…

Ajax オブジェクトを自作

Twippera で使うために Ajax オブジェクトを自作していたが、タイムアウト処理がうまくいかず…。 "JavaScript 第5版" に参考になるコードが載っていたので作り直した。 var Ajax = {}; Ajax.request = function(url, callback, options) { var xhr = new XM…

3桁ごとに区切る

Number.prototype.split3 = function() { var r = ""; var t = this.toString().split('.'); var s = t[0].split("").reverse(); var a = t[1]; for(var i = 0; i < s.length; i++) { if(i % 3 == 0 && i != 0 && s[i] != "-") { r = s[i] + "," + r } else …

定数

@spidermonkey var a = 1; Object.watch.apply(this, ["a", function(p, o, n) { return o; }]); print(a); // 1 a = 2; print(a); // 1 a++ print(a); // 1 a = "hoge" print(a); // 1 お、できた。と思ったら const a = 1; でよかったみたい。 上のコード…

Web Forms2.0 Validation

http://higeorange.com/tmp/testWebForms20-2.html validity オブジェクトあたりを。 element.validity.typeMismatch を調べると type が "url", "e-mail" なんかのときにとても便利だ。 pattern を記述しなくても正しいかどうかを判定できる。 もちろん pat…

ある数からある数までの配列をつくるの高速化

1 から 10 までの配列は [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] となるがこれを普通に作った場合。 Number.prototype.to = function(e) { for(var i = this, r = []; i <= e; i++) { r.push(i); } return r; } (1).to(100) // 1 から 100 までの配列 たぶん高速化…

再帰足し算

Array.prototype.sum = function() { if(this.length == 1) return this[0]; return this.pop() + arguments.callee.apply(this); } alert([1, 2, 3, 4, 5, 6, 7, 8, 9, 10].sum()); // 55 追記 配列が大きくて再帰しすぎると "too much recursion" とエラー…

無名関数の繰り返し with タイムアウト

(function() { // 処理 setTimeout(arguments.callee, 1000) })() 引数を取る場合 : 0 から順に数字を表示してみる (function(c) { var self = arguments.callee; document.body.innerHTML = c setTimeout(function() { self(++c) }, 1000) })(0)

getElementsByTagName で返ってくるもの

"document.getelementsByTagname('*')" で 返ってくるものは Opera, Konqueror だと "NodeList", Firefox だと "HTMLCollection" のようだ。あんまり変わらないけどね。

キーイベント追加 2

// KeyBinds.js // Author: Higeorange // Licence: MIT var KeyBinds = function(elm, k) { this.elm = elm; this.keybind = {}; for(var t in k) { this.add(t, k[t]); } }; KeyBinds.prototype.expand = function(key) { var keycode; var m = null var s…

キーイベント追加

var KeyBind = {}; KeyBind.add = function(elm, key, func) { var keycode; var m = null; var sp = { "Up" : 38, "Down" : 40, "Right" : 39, "Left" : 37 } if(key) { key.replace(/^(([CSA])-)?(\w+)$/, function($0, $1, $2, $3) { if($2) { m = ({ C :…

配列にプロパティ & メソッドを持たせる。

var Hoge = [1,3]; Hoge.fuga = "foobar" Hoge.print = function(a) { print(this + ":" + this.length); } Hoge.print(); // 1,3:2 Hoge.push(3); Hoge.print(); // 1,3,3:3 Hoge.push(4); Hoge.print(); // 1,3,3,4:4 print(Hoge.fuga) // foobar 配列はオ…

アホなミス

["H", "o", "g", "e"].pop().join(””) // pop() で配列が返ると思い込む。 ["F", "u", "g"].push("a").join("") // push() で配列が返ると思い込む。 こうするるよ。 Array.prototype._pop = function() { this.pop(); return this; } Array.prototype._shif…

コーディングスタイル

var Person = { name : "higeorange", getName: function() { alert(this.name); } } var Person = {}; Person.name = "higeorange"; Person.getName = function() { alert(this.name); }; どっちが見やすい?

変数展開

ruby とかの #{foo} を 変数でおきかえてくれるやつね。 String.prototype.interpolate = function() { return this.replace(/#\{(.*?)\}/g, function($0, $1) { return window[$1]; }) }; var a = "hoge" alert("foo#{a}bar".interpolate()); // foohogebar…

中央そろえ

io の alignCenter を javascript で。 プラス拡張 String.prototype.repeat = function(n) { for(var i=0, str=""; i < n; i++) { str += this; } return str; } String.prototype.alignCenter = function(n, str, astr) { var r = (n - this.length) / 2 r…

今日はまったこと

しょうもないことではまってしまった。 演算子は 便利だ var foo = typeof hoge != 'undefined' ? hoge : "hage" を var foo = hoge || "hage" みたいにかける。つまり || の左側が偽*1なら右側を返すという具合だ。 で、はまったこと。 var foo = 0; var ba…