Firefox 25(Nightly) で新たに構造体チックなのと数値リテラルが実装された

Binary Data Object

新たに数値型として、

  • uint8
  • uint16
  • uint32
  • uint64
  • int8
  • int16
  • int32
  • int64
  • float32
  • float64

の関数。

そして、上記の型関数などを引数にしてバイナリーデータ的なArrayやStructorを定義できるコンストラクタとして

  • ArrayType
  • StructType

が定義された。
この2つは、コンストラクタを返すコンストラクタである。(←何だか意味不明だw)

var Vec3 = new ArrayType(float32, 3); // float32型を3つ
Vec3.elementType; // float32 (ArrayTypeで指定した型)
Vec3.length; // 3
Vec3.bytes;  // 12 (flaot32(4byte) * 3)

var pos = new Vec3([1,2,1]);
var Color = new StructType({ r: uint8, g: uint8, b: uint8 });
Color.bytes;    // 3 (r,g,b で uint8(1byte) * 3)
Color.fields;   // [object Object]
Color.fields.r; // uint8

var c = new Color;
c.r = 10;
c.g = 10;
c.b = 10;
c.a = 10; // => ReferenceError: reference to undefined property 
var Cube = new StructType({
  pos: Vec3,
  color: Color,
  length: uint8
}); // 作った型を指定可能

var c = new Cube;
c.color = { r: 10, g: 10, b: 10 };
c.pos = [10, 10, 0];
c.length = 30;

という具合に、新たな型として new ArrayType すると、コンストラクタが生成される仕組み。因みに、ArrayType,StructType も作った型も明示的に new する必要がある。

門外漢で詳しくないが、グラフィック等を扱おうとした時などに有用になってくるのではないだろうか。

詳しくは、上記のリンクにあるテストコードを見てね。(本当に門外漢なので、詳しい説明ができないorz)

数値リテラル

BinaryIntegerLiteral

2進数を示すリテラル

var bin1 = 0B10; // 2
var bin2 = 0b111; // 7

0Bまたは0bを頭に付ける(数値の 0 と大文字/小文字の b)

OctalIntegerLiteral

8進数を示すリテラル

Strictモードでは、頭に0 を付けるのは禁止されちゃったからね、地味に嬉しい

var permission = 0o777;
var umask = 0O022;

0Oまたは0oを頭に付ける。(数値の 0 と大文字/小文字の o)
しかし、0Oとかフォントによって何だか意味不明になりそう...。