読者です 読者をやめる 読者になる 読者になる

竹林のゆとりブログ

山奥で生活し、日々の思いをつらつらと書くブログ。 IT、数学、アニメなど。

Javascript~AwfulParts~

Javascriptの翻訳第3弾

Gloval Variables

glovalb variableを使っていると、プログラムの挙動が複雑になり、信頼性が落ちる。 それは、subprogram同士を独立して動かすことが難しくなるため。

また、Javascirptは一つの共通なglobalobjectでコンパイルされる。

globacl objectの定義方法は3通りある。 1つ目は関数の外で定義すること 2つ目はglobal objectにpropertyを直接追加すること 3つ目は宣言をせずに、変数を使うこと

Scope

blockは存在するが、block内に閉じたscopeは存在しない。 そのため、変数はfunctionのtopに置くほうが良い。

Semicolon Insertion

semicolonがなくても補ってくれるメカニズムがあるが(本当?)、これに依存しすぎると、重大なバグを引き起こす。 例えば以下

return
{
status: true
};

これはreturn;と次のブロックとみなされる。

Reserved Words

あまり使われないものでも存在しており、これを変数として使おうとするとillegalになる。

Unicode

Javascriptができた時はUnicodeで文字は高々65536個だと想定されていた。 今はそれよりはるかに多いため、2つの文字を使って、一つの文字だと考えられている。

typeof

型を文字列で表示してくれるメソッドだが、 typef nullがなぜかObjectになるという欠点がある。

paselnt

文字列を数字に変換するメソッドで、変換できないものがくるとそこで中断するため "16 tons"は"16"に変換される。 また、08等0から始まる場合は8進数とみなされる。

+

片方が空文字の場合、文字列に変換する。

Floating Point

小数の演算の結果が正しく出ない。 そのため、可能な限り整数で計算する。

NaN

number出ないものに対して、numberとして演算をすると起きる。 typeof ではnumberとなる。

Phony Arrays

typeofではArrayは識別できない。そのためconstructorをみて識別する。 A.constructor === Arrayで配列かを判別する。

Falsy Values

''のtypeがStringであったり、nullのtypeがObjectであったりとおかしいものがある。 が、変えられない。

hasOwnProperty

これはmethodであるため、中身をoverrideできる。

Object

Objectの中身はprototypeが存在するため、必ず空ではない。 このことがときおりやっかいを生み出す。 要素を定義したか否かを成分が空かどうかで判断している場合、prototypeに定義されていて、挙動がおかしくなる場合がある。