Hatena::ブログ(Diary)

Higé au lait Twitter

 | 

2007年11月22日

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 String("hoge"))
object
js> typeof(3)
number
js> typeof(Number(3))
number
js> typeof(new Number(3))
object
文字列 -> 数値
js> "10" - 0
10
js> "10" + 0
100
Array.fill
js> new Array(10 + 1).join("*").split("")
[*,*,*,*,*,*,*,*,*,*]

new Array(n) n:数値 で作った配列は各要素が "undefined" となる。

で undefined にも代入できるからこれをうまくつくって Array.fill 的なことができないだろうか。結果だめっぽい。

js> undefined = "*"
*
js> undefined
*
//
js> typeof (new Array(10))[1]
undefined
基本型と参照型

文字列は immutable.


3.1.5.4 の表重要。

window.window.window
>>> window == window.window
true
>>> window == this.window
true
>>> window == window.self
true

window オブジェクトに自己参照として self & window プロパティがある。

delete 演算子の挙動がキモい

この辺もっと。

//FireBug で謎の挙動
>>> var a=1; delete a; a
a is not defined
>>> var x=1; delete x; x
1

//SpiderMonkey
js> var a=1;delete a;a
1
js> var x=1;delete x;x
1

JavaScript 第5版に書かれているのは下の挙動。

FireBug がおかしいっぽい。どちらにしろこの実装は気持ち悪い。


多重代入?

なんかこの辺の話題が出てたような気がしたので

>>> var [a, b] = [3, 4]
>>> a
3
>>> b
4

JavaScript 1.6 からだったかな。


注意

コードの先頭の

js> が spidermonkey 1.7で、

>>> が FireBug で試した。


感想

  • やっぱり PCがないときつい。その場で試したい。なんとしても手に入れないと。
  • 他の言語の話になるとさっぱりわからない。もっと他の言語も学ばなければ。特に P*P。
  • もっと色な人とからみたかった。 Twitter 検索の人と話せたのはうれしかった。

参考




とりあえず、こんなところ。また思い出したら追記するかもしれない。

最後に こんな素晴らしいイベントを企画、開催していただいた Kanasan さんありがとうございました。また参加すると思います。


f:id:higeorange:20071122010210j:image

ふぉくすけステッカー。


Delicious.com - Discover Yourself! に関連ページをまとめるつもり。


追記

Array.fill 良く考えると1文字しかできないのね。やっぱループで回すしかないのかなぁ。

ujihisaujihisa 2007/11/22 00:59 副主催者的な者のujihisaです。参加ありがとうございました。
まとめ乙です!

KanasansoftKanasansoft 2007/11/24 07:05 Kanasansoftことkanasanです。
お疲れさまでした。
Array.fillの制約と実装を書きます。
処理の関係上、初期値には一文字の文字列しか指定できません。
また、空文字の場合正常に動作しないため、例外処理が必要になります。

function arrayFill(num,str){
if(str.constructor!=String||str.length!=1){
return new Array(num);
}else if(str==””){
return (new Array(num)).join(”*”).split(”*”);
}else{
return (new Array(num+1)).join(str).split(””);
}
}

こう書くとあまり実用的ではないかもしれませんね。
空文字が一番多用しそうです。

KanasansoftKanasansoft 2007/11/27 01:32 kanasanです。

以下のurlでfollowして貰えました。
これだと複数文字列でも可能です。
もの凄く綺麗な処理です。

Array.stringFilled - ’ellaneous
http://d.hatena.ne.jp/murky-satyr/20071124/1195879320

String.prototype.filledArray = function(num){
return (num = Number(num)) > 1
? Array(num + 1).join(this).split(RegExp(’(?=(?:[¥¥s¥¥S]{’+ this.length +’})+$)’))
: [this];
};

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

 |