ユーザ用ツール

サイト用ツール


ecmascript:es5

ECMAScript 5th

ECMAScript 5thで追加された仕様についてメモ、少しずつ追加していきます。

Array

  • Array.prototype.forEach
  • Array.prototype.every
  • Array.prototype.some
  • Array.prototype.map
  • Array.prototype.filter

String

  • String.prototype.trim

Object.create

var a = Object.create({ 
  hoge: "ほげ",
  getHoge: function() { return this.hoge }
});
 
console.log(a.getHoge());  // "ほげ"

Object.defineProperty

プロパティを定義

var a = {};
Object.defineProperty(a. "hoge", {
  value: "ほげ"
});
console.log(a.hoge);   // "ほげ"

writable属性

デフォルトのwritable属性はfalseで、上書き不可のプロパティとなる。

var a = {};
Object.defineProperty(a, "hoge", {
  value: "ほげ"
});
a.hoge = "ふが";       // 上書きできない!
console.log(a.hoge);   // "ほげ"
var a = {};
Object.defineProperty(a, "hoge", {
  value: "ほげ",
  writable: true
});
a.hoge = "ふが";
console.log(a.hoge);   // "ふが"

enumerable属性

デフォルトのenumerable属性はfalseで、for in ループで列挙されない。

var a = {};
Object.defineProperty(a, "hoge", {
  value: "ほげ"
});
for (var i in a) {
   console.log(i + ":" + a[i]);   // 何も表示されない!
}
var a = {};
Object.defineProperty(a, "hoge", {
  value: "ほげ",
  enumerable: true
});
for (var i in a) {
   console.log(i + ":" + a[i]);   // hoge:"ほげ" が出力される
}

configurable属性

デフォルトのconfigurable属性はfalseで、deleteできない。

var a = {};
Object.defineProperty(a, "hoge", {
  value: "ほげ"
});
console.log(a.hoge);  // "ほげ"
delete a.hoge;        // hogeを削除できない
console.log(a.hoge);  // "ほげ"
var a = {};
Object.defineProperty(a, "hoge", {
  value: "ほげ",
  configurable: true
});
console.log(a.hoge);  // "ほげ"
delete a.hoge;        // hogeを削除できる
console.log(a.hoge);  // undefined

setter, getterを定義

var a = {};
Object.defineProperty(a, "hoge", {
  set: function(_hoge){ this._hoge = _hoge + 1; },
  get: function() { return this._hoge + 1; },
});
 
a.hoge = 1;
console.log(a.hoge);   // 3;

setter, getterを定義した場合は writable, configurable, value を定義できない。

以下の例はsetterやgetter内部で自分自身を呼ぶ事になり、無限再帰でエラーとなる。

/* これはだめ */
Object.defineProperty(a, "hoge", {
  set: function(hoge){ this.hoge = hoge; },
  get: function() { return this.hoge; },
});
ecmascript/es5.txt · 最終更新: 2015/10/24 04:32 by nullpon