16
ECMA262-Edition5.1読書会 2014/07/23 藤澤勇樹

20140723 ecmascript

Embed Size (px)

Citation preview

Page 1: 20140723 ecmascript

ECMA262-Edition5.1読書会

2014/07/23藤澤勇樹

Page 2: 20140723 ecmascript

第8条 型

ECMAScript言語型 仕様書型

Undefined型

Null型Boolean型

String型

Number型Object型

Reference型

List型Completion型

など

Page 3: 20140723 ecmascript

8-1 Undefined型

値が格納されていない変数はこの値をもつ

Page 4: 20140723 ecmascript

TYPEOF関数

typeof演算子は対象となる値のデータ型を表す文字列を返す演算

Page 5: 20140723 ecmascript

8-2 Null型

まさにnullと呼ばれる値を持つ

これがObject型になるのはなぜか??typeof null

過去に11.4.3のNullの結果を変えようという提案があったが、下位互換性のために採用されなかった。

http://wiki.ecmascript.org/doku.php?id=harmony:typeof_null

Page 6: 20140723 ecmascript

8-3 Boolean型

trueとfalseと呼ばれる二つの値を持つ論理要素を持つ

Page 7: 20140723 ecmascript

8-4 String型

16ビットの符号なし整数値を要素とするゼロ個以上の順列の並びである

どの要素も単一のUTF16コード単位であるとみなされる

プリミティブ値でlengthが取得できるのはなぜか?var str = ‘str’str.length //3

Page 8: 20140723 ecmascript

8-5 Number型

倍数精度64ビットIEEE754形式で表される 符号:1ビット 指数部:11ビット 仮数部:52ビット

絶対値が2の53乗より小さい整数は、Number型で表現することができる

Math.pow(2,53)+1;Math.pow(2,53)+3;

が不正確な値になるのはなせか?

Page 9: 20140723 ecmascript

丸めモード

Number型で正確に表せるのは、2の52乗まで

その後は、2進数に直した最下位が丸め対象となる

丸めは、偶数丸めモードとなる

2の1024を超えるとInfinity(無限大)となる

Page 10: 20140723 ecmascript

8-6 Object型 Object型はプロパティのコレクション。プロパティは以下の3

つに分類される 名前付きデータプロパティ

表5

名前付きアクセサプロパティ 表6

内部プロパティ 表8、表9

Page 11: 20140723 ecmascript

プロパティ属性

var obj = Object.create(Object.prototype, { x : { value : 1, writable : true, // x の値が変更できる

enumerable : true, // for (var k in obj) で x を辿ることができる

configurable : true // 下に説明

}}

Page 12: 20140723 ecmascript

デフォルト属性値

表7のデフォルト属性は、Configurableが少なくともtrueに思える。検証間違いか? 検証方法は、オブジェクトをcreateして、何もし

ない状態でプロパティが削除できるかどうかを検証した

削除できた

Page 13: 20140723 ecmascript

内部プロパティの[[Class]]

オブジェクトの仕様で定義された分類を示す文字列

Object.prototype.toStringを除いてプログラムにこの値へアクセスする方法を提供しない点に注意すること

Object.Constructor.nameで取得できるがこれは仕様違反?

Page 14: 20140723 ecmascript

8-7 Reference仕様型

Reference型は、delete、typeof、代入演算子のような演算子の振る舞いを説明するために使われる。

Referenceは以下、3つから成り立つ Base値:undefined,Object,Boolean,String,Number,

もしくは環境レコード リファレンス名:文字列 Boolean値であるstrictリファレンスフラグ

Page 15: 20140723 ecmascript

JavaScriptのReference型

JavaScriptのReference型:

<base, referencedName>

*グローバルオブジェクトの場合は

base=Environment Recordとなる 10.2.1

Page 16: 20140723 ecmascript

“string”.lengthの場合

1. Type(string)が参照でなければVそのものを返す

2. GetBase(string)の呼び出し結果をbase(String型)とする

3. HasPrimitibeBaseはtrueなので、特別な[[GET]]メソッドにする

4. ToObject(Base)の呼び出し=>Stringオブジェクト

5. Stringオブジェクトの内部メソッドをプロパティ名”length”で呼び出した結果をdescとする