2011年9月5日月曜日

サイ本5版 1部「コアJavaScript」  3章「データ型と値」 3.1~3.12


このエントリーをはてなブックマークに追加


数値


すべての数値は浮動小数点。IEEE754標準の64bit浮動小数点形式。
数値リテラルはマイナス記号で反転できるが、マイナス記号は単項演算子とみなされ、数値リテラルの一部ではない。


整数リテラル


8進数はECMAScriptでは規定されていないので、使用しないほうがいい。


浮動小数点リテラル


[数値][.数値][e|E[(+|-)]数値]
6.02e23 -> 6.02x10^23


特殊な数値


浮動小数点値の表現可能最大値を超えると「Infinity」となる。マイナス側は「-Infinity」
未定義な演算結果はNaN(Not a Number)になる。これは自分自身を含めていかなる数値とも合致しない。
isNaN()という関数を使用する。
上記のInfinity、-Infinity、NaNでないことをテストするにはIsFinite()
Finite([形]有限な)


エスケープシーケンス



  • \xXX

    • Latin-1



  • \xXXXX

    • Unicode



  • \XXX

    • 8進数Latin-1 ECMAScript v3ではサポートされてないので使用しない





文字列の操作


文字列中の特定の文字は配列表記を用いて読み込み可能。
しかし、ECMAScript v3 でサポートされてないので、charAt()を使用する



last_char = s.charAt(s.length - 1);


数値から文字列への変換



var n = 100;
var str = n + "";
var str = String(n);
var str = n.toString(10); //10進数で。省略可



有効桁数や指数表示を指定して数値->文字列変換


JS1.5以前は欠点があり、小数点以下の桁数の指定や、指数表示の指定方法が用意されていなかった。
JS1.5ではNumberクラスに数値から文字列に変換するメソッドが3つある。



// すべて四捨五入される
var n = 123456.789;
//小数点桁数指定
n.toFixed(0); //123457
n.toFixed(2); //123456.79
//指数表示指定
n.toExponential(1); //1.2e+5
n.toExponential(3); //1.235e+5
//有効桁数指定。有効桁数より大きい場合は、指数表示
n.toPrecision(4); // 1.235e+5
n.toPrecision(7); // 1.23456.8



文字列から数値への変換


"5"*"2"
"5"-0
Number(" 5 ") //前後に空白があってもいい
parseInt("15px") //15 後の文字列は無視される。第2引数で進数指定できる。
parseFloat("15.5px") //15.5


+は文字列結合と解釈されるので不可。
parseInt,parseFloatで数値に変換できないとNaNになる。


論理値への型変換


論理値コンテキストで変換されるが、明示的に変換する場合は
Boolen(x);を使用するか、!!xとする。



  • trueに変換されるもの

    • 0とNaN以外,

    • 空文字列以外,

    • nullでないオブジェクト、関数、配列





オブジェクト


配列

連想配列と異なり、インデックスが正の整数。
コンストラクタ new Array()は new Array(1,2)は[1,2]を表すが、new Array(2) は配列の大きさを表し[undefined,undefined]になる。
これが紛らわしいので、配列はリテラルで記述するのがいい。


基本型ではないオブジェクト


Dateオブジェクト

基本型ではないが、Dateコンストラクタで日時の設定取得ができる。


RegEXPオブジェクト

リテラルのほうが簡潔だが、リテラルはコンパイル時に一度しか生成されないので、
動的に生成する場合はコンストラクタを使う。


Errorオブジェクト


  • Error

  • EvalError

  • RangeError

  • ReferenceError

  • SyntaxError

  • TypeError

  • URIError


が定義されている。


null値(=値がない)


CやC++ではnullは0と同じだがJSは違う。nullはnullであり、コンテキストにより変化する。



  • コンテキスト

    • 論理値コンテキストではfalse

    • 数値コンテキストでは、0

    • 文字列コンテキストでは"null"





undefined (=未定義値)



  • 宣言されているが値が設定されていない(初期化されていない)変数

  • 存在しないオブジェクトプロパティ


を使おうとすると未定義値が返ってくる。



  • (null == undefined)はtrue

  • (null === undefined) はfalse

  • コンテキスト

    • 論理値コンテキストではfalse

    • 数値コンテキストではNaN

    • 文字列コンテキストでは"undefined"





型変換まとめ表


本のP39





0 件のコメント:

コメントを投稿