Upload
yuki-fujisawa
View
86
Download
3
Embed Size (px)
Citation preview
ECMA262-Edition5.1読書会
2014/07/23藤澤勇樹
第8条 型
ECMAScript言語型 仕様書型
Undefined型
Null型Boolean型
String型
Number型Object型
Reference型
List型Completion型
など
8-1 Undefined型
値が格納されていない変数はこの値をもつ
TYPEOF関数
typeof演算子は対象となる値のデータ型を表す文字列を返す演算
8-2 Null型
まさにnullと呼ばれる値を持つ
これがObject型になるのはなぜか??typeof null
過去に11.4.3のNullの結果を変えようという提案があったが、下位互換性のために採用されなかった。
http://wiki.ecmascript.org/doku.php?id=harmony:typeof_null
8-3 Boolean型
trueとfalseと呼ばれる二つの値を持つ論理要素を持つ
8-4 String型
16ビットの符号なし整数値を要素とするゼロ個以上の順列の並びである
どの要素も単一のUTF16コード単位であるとみなされる
プリミティブ値でlengthが取得できるのはなぜか?var str = ‘str’str.length //3
8-5 Number型
倍数精度64ビットIEEE754形式で表される 符号:1ビット 指数部:11ビット 仮数部:52ビット
絶対値が2の53乗より小さい整数は、Number型で表現することができる
Math.pow(2,53)+1;Math.pow(2,53)+3;
が不正確な値になるのはなせか?
丸めモード
Number型で正確に表せるのは、2の52乗まで
その後は、2進数に直した最下位が丸め対象となる
丸めは、偶数丸めモードとなる
2の1024を超えるとInfinity(無限大)となる
8-6 Object型 Object型はプロパティのコレクション。プロパティは以下の3
つに分類される 名前付きデータプロパティ
表5
名前付きアクセサプロパティ 表6
内部プロパティ 表8、表9
プロパティ属性
var obj = Object.create(Object.prototype, { x : { value : 1, writable : true, // x の値が変更できる
enumerable : true, // for (var k in obj) で x を辿ることができる
configurable : true // 下に説明
}}
デフォルト属性値
表7のデフォルト属性は、Configurableが少なくともtrueに思える。検証間違いか? 検証方法は、オブジェクトをcreateして、何もし
ない状態でプロパティが削除できるかどうかを検証した
削除できた
内部プロパティの[[Class]]
オブジェクトの仕様で定義された分類を示す文字列
Object.prototype.toStringを除いてプログラムにこの値へアクセスする方法を提供しない点に注意すること
Object.Constructor.nameで取得できるがこれは仕様違反?
8-7 Reference仕様型
Reference型は、delete、typeof、代入演算子のような演算子の振る舞いを説明するために使われる。
Referenceは以下、3つから成り立つ Base値:undefined,Object,Boolean,String,Number,
もしくは環境レコード リファレンス名:文字列 Boolean値であるstrictリファレンスフラグ
JavaScriptのReference型
JavaScriptのReference型:
<base, referencedName>
*グローバルオブジェクトの場合は
base=Environment Recordとなる 10.2.1
“string”.lengthの場合
1. Type(string)が参照でなければVそのものを返す
2. GetBase(string)の呼び出し結果をbase(String型)とする
3. HasPrimitibeBaseはtrueなので、特別な[[GET]]メソッドにする
4. ToObject(Base)の呼び出し=>Stringオブジェクト
5. Stringオブジェクトの内部メソッドをプロパティ名”length”で呼び出した結果をdescとする