せかいや

いまいるここを、おもしろく http://sekai-in-the-box.appspot.com/

【JavaScript 】パーフェクトJavaScript 感想文

 
■topic summary
I study JavaScript.

 
始まるよー。

パーフェクトJavaScript (PERFECT SERIES 4)

パーフェクトJavaScript (PERFECT SERIES 4)


以下、気づいたことなど

 

JavaScript の挙動

JavaScript プログラミングの暗黒面として語られるのがWebブラウザごとの挙動の違いです

そうそう。

JavaScript 言語処理系の違い
 →ECMAScript準拠を打ち出すことで移植性を高める
レンダリングエンジンの違い
 →Acidテストを行い挙動の差異をなくす(明文化された規格ではない)
 http://acid3.acidtests.org/


 

「関数」

関数はある一連の手続きをまとめて外部から呼び出せるようにする仕組みです。関数に引数を渡せ、関数は値を返せます。

なるほど!
関数とパラメータってなんのつながりが?
と思っていたけれど

手続き・・・値を返さない
関数・・・値を返す
という理解ではなくて、
本質的には「外からの呼び出し」であるわけだから、
インプットとアウトプットが存在できるわけだ。

ブロックは、パラメータをつけることで「手続き」だけでなく「関数」のようにふるまうことができるよ。

http://rubyist.g.hatena.ne.jp/muscovyduck/20060518/p1

というのは、こういうニュアンスを指していたのか。

 

length

'012'.lehgthと書くと、・・・文字列オブジェクトのlengthプロパティにアクセスします

メソッドではない。

  

文字列オブジェクトと文字列値

new String("a") == new String("a")
false

new String("a")+'' == new String("a")+''
true

 

文字列オブジェクトは不変

JavaScript

var s = new String("abc");
s[0] = "x";
s
String {0: "a", 1: "b", 2: "c"}

 
Ruby

s="abc"
s[0]= "x"
p s   #<= "xbc"

 

Number.MAX_VALUE.toString(16)

Number.MAX_VALUE.toString(16)
"fffffffffffff800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"

 

typeof null

うーん、、、これはバグの原因になりそう

typeof null
"object"
typeof undefined
"undefined"

 
 

null

Ruby
nilはNilClassの唯一のインスタンス

JavaScript
null型の取りうる値はnull値の1値だけ。null値はリテラル値。

nullはリテラル値でundefinedは変数名
null値は「何も参照していない状態」という積極的な意味づけがあるが、
undefined値は文字通り単に未定義な値に過ぎない。
undefinedを識別子にする必要はなく、
グローバル変数undefinedを未代入値の変数にすればいいだけ。


 

true

Ruby
true は TrueClass クラスの唯一のインスタンス
 
JavaScript
trueはリテラル値。


 

リテラル表記

var hoge = "bar";

文字の並びとして、var hoge に意味はない。
文字の並びとして、"bar"は意味がある。
 

var hoge0 = 0;

数値としての意味を持つのは、右辺のリテラル表記の0

 

式文

JavaScript すべての式を、式文にできる
Java 一部の式のみを、式文にできる
式と式文はパーフェクトJavaをやっているときに考えたところ