ECMAScript

ES6 Quiz

Q. https://gist.github.com/teramako/858c448cb76cb8d309b0 A. https://gist.github.com/teramako/6317d057902b91c0dc1a ECMAScript6th仕様も佳境に入っていますし、そろそろクイズ的なものが出てきても良いのでは? → あまりなさそう。 → 作ってみるか。 …

Firefox 34 で Method Definition 構文が実装された

924672 - Implement ES6 Method Definitions 14.3 Method Definitions var o = { method: function method () { return "OK" }, }; と書いていたところを var o = { method() { return "OK"; }, }; こう書けるようになる。

Firefox 34 でES6の Object.assign() が実装されたが…

937855 - Implement ES6 Object.assign 仕様: 19.1.2.1 Object.assign ( target, ...sources ) 皆さん待望の、mixin をするメソッドである。第一引数のtargetに、第二引数以降のプロパティの値を代入していく。 var obj = { foo: "FOO", }; var res = Object…

Firefox 34でES6構文の ComputedPropertyName が実装された

924688 - Implement ES6 computed property names また、新しい構文。オブジェクトリテラル中のプロパティ名部分に式を入れることができる様になる。 今まで var prop = "foo"; var obj = {}; obj[prop] = "FOO Property"; 今までは一旦オブジェクトを作って…

Firefox 34(Nightly)で String.raw が実装された件とTaggedTemplateについて

1039774 - Implement ES6 String.raw 仕様 12.3.7 Tagged Templates 21.1.2.4 String.raw TemplateLiteral の続き。前回は、`(バッククォート) でくくることで、ヒアドキュメント的な複数行に渡る文字列の生成ができる事、${expression}で式の埋め込みができ…

Symbolの使い道 - 他に迷惑を掛けないプロトタイプ拡張

先日 Firefox Nightly で Symbol が実装されたわけだが、その使い道を考えていた。それで思いつたのが、Symbolを使えば迷惑を掛けずにプロトタイプ拡張ができるのでは、ということ。こんな感じ。 "use strict"; { let keys = Symbol.for("teramako.Object.ke…

Firefox 33でES6のSymbolが実装された

645416 - harmony:symbols) Implement symbols 不完全ながら ES6 の Symbol が実装された。Symbolは、Undefined, Null, Boolean, Number, String に続く新たなプリミティブな型である。既にChromeのV8エンジンには実装されていて、Symbolについて - JS.next…

Firefox 32(Nightly) で Array.prototype.copyWithin が実装された

934423 - Implement Array#copyWithin mozilla-central: changeset 186637:2184d492b374 ECMAScript 6th 仕様の Array.prototype.copyWithin 実装。 Array.prototype.copyWithin (target, start [, end])引数は target(Number): コピー先の開始Index値 start…

Firefox 32 で Array.from が実装された

904723 - Implement ES6 Array.from 22.1.2.1 Array.from ( arrayLike [ , mapfn [ , thisArg ] ] ) Array-like な値をArrayに変換するメソッドです。引数は arrayLike: Array-likeなオブジェクト mapfn:(Optional) Array.prototype.map に渡すような functi…

Generator Function 中の return 句について

新年早々、まさかりを投げてる感があって心苦しいけど、気になったので…。 node.js/v8のgeneratorsのパフォーマンスについてちょっと調べた - SundayHacking さて、generatorsの説明は他に任せるとして、いきなりコードです。 function* es6_generator() { y…

Firefox 29 で String.fromCodePoint, String.prototype.codePointAt が実装された

918879 - Implement String#codePointAt and String.fromCodePoint テストコード: http://mxr.mozilla.org/mozilla-central/source/js/src/tests/ecma_6/String/ ECMAScript6th における、Unicode をもう少しうまく扱うためのメソッド2つ。従来の String.fr…

Re: __proto__ が変わりゆく件について

__proto__が変わりゆく件について - 株式会社ネクスト エンジニアBlog さすがにちょっとツッコミを入れたい。 参考: draft_proto_spec_rev2.pdf※ まだドラフトで確定ではないのでご注意ください。 http://nextdeveloper.hatenablog.com/entry/2013/12/15/191…

super キーワード

ECMAScript 6th には super キーワードがある。もとからキーワードとしてはあったけど、6th から挙動をもつキーワードとなった。期待通り、プロトタイプチェーン上のプロパティアクセスまたはメソッドコールに使用できるキーワードである。使用可能な箇所は:…

new 演算子と Construct 内部メソッド

Javascript weirdness? - Google グループ var o1 = [], f1 = function(){ return o1; }; (new f1()) === o1; // true var o2 = 1, f2 = function(){ return o2; }; (new f2()) === o2; // false これってどういうことだってばよ? という話。例によって仕様…

Firefox 27(Nightly) にて SpreadCall が実装された

762363 - (harmony:spreadcall) implement the spread operator in calls func (a, b, ...iterableObject); な感じで、イテレート可能なオブジェクトを展開して、それぞれの引数に分けてくれるもの。func (a, b, ...[1,2,3,4]) とすると、func (a, b, 1, 2, …

Generator のプロトタイプ

904701 - Implement prototype madness for ES6 generators Firefox 26 (Nightly) で function * () { yield ... } な ECMAScript 6th にある Generator の構文が導入された。ということで、やる気を出して、チョコチョコと調査。まず、用語の定義 Generator…

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

578700 – (harmony:bindata) [meta] Harmony binary data objects harmony:binary_data [ES Wiki] numerictypes.js arraytype.js structtype.js 894026 – Implement BinaryIntegerLiteral and OctalIntegerLiteral binary-literals.js octal-literal.js Bina…

Firefox 25(Nightly) にて、{Map,set}.prototype.forEach が実装された

866847 - Implement Map#forEach and Set#forEach テストコード mozilla-central mozilla/js/src/jit-test/tests/collections/Map-forEach.js mozilla-central mozilla/js/src/jit-test/tests/collections/Set-forEach.js これで Map, Set において、ECMAScr…

JavaScript にクラスは作れますか?

参考: 最強オブジェクト指向言語 JavaScript 再入門! >JavaScript でクラスは作れますか? 無理ポ。 では、クラスっぽいものは作れますか? だから、無理ポ。

SpiderMonkey Regrets

Is the most implemented ECMAScript.next specs SpiderMonkey as known as Firefox's JavaScript engine ?Yes, indeed many of implementaions are available. I was watching and blogging the improvement. But some of things are launched for a long t…

Firefox 25 で Array.prototype.{find, findIndex} が実装された

[].indexOf に似ているけど、より汎用的なメソッドforEach, map, some, every 等と同様にコールバックを引数にとって、true を返したものの、値またはindex値を返すメソッドである。実装見たほうが分かりやすいかも。(ちょっと特殊だけどJavaScriptで書かれ…

ArrowFunction 的即時関数

ある意味、ソーシャルボタンのJavaScriptでfunctionの前に「!」がついている理由の続き。今回は ECMAScript 6th から入る ArrowFunction で即時関数を考える巻。前回は普通の関数式での即時関数を解説してみた。 functionには2種類ある いきなり function …

Firefox 24(Nightly) で {Array,Map,Set}.prototype.{keys,values,entries} メソッド等が実装された

869996 – Set.prototype.{keys, values, entries} 875433 – iterator methods of [Array, Map, Set].prototype should be same function object as entries/values Array.prototype values() Map.prototype keys() values() entries() Set.prototype keys() …

ECMAScript Proxy の get 時の注意点

658266 - [Harmony]Proxy: 'this' in getter/setter doesn't indicate the proxy object DirectProxyになる前に上げたバグ*1なのでちょっとコードが古いけど、回答が付いて気付かされた。Proxy通過時の this の問題 var obj, handler, proxyObj; obj = { _na…

ECMA-402 Internationalization API

Chrome 28 で ECMA-402 が実装されてたのを期に少し書いてみる。本当な Firefox Nightly でも一度は実装されたんだけど、バグがあったからか今はバックアウトしちゃって使えない。確認したバージョン: 28.0.1500.11 (Official Build 199640) dev-m Standard…

ES.next Draft仕様より、普通のfunctionとArrowFunctionの違い

window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], t = window.twttr || {}; if (d.getElementById(id)) return t; js = d.createElement(s); js.id = id; js.src = "https://platform.twitter.com/widgets.js"; fjs.paren…

QUnit で ECMAScript 6th Compatibility Test を書いてみた

ECMAScript 6th Compatibility Test 既にECMAScript compatibility tableがあって、こちらは各UAでの結果あり、これはこれで良いのだが、イマイチ精度が良くないので、QUnit の練習も兼ねて現ブラウザでのテストコードを書いてみた次第。https://github.com/…

Firefox 21(Nightly) でオブジェクトのキー順序がES.nextで提案されているものに

今まで、FirefoxのJSエンジン、SpiderMonkeyでは、オブジェクトのキーの順序は定義された順だった。 var o = { 2: 0, 3: 1, a: "A", 1: 2, }; o[0] = 0; for (var key in o) { console.log(key + ":" + o[key]); } 2: 0 3: 1 a: A 1: 2 0: 0という感じ。いつ…

Object.defineProperty できなくなるケース

ES-Discuss のメーリングリストで知った。 Object.prototype.get = function(){}; var o = {}; Object.defineProperty(o, "hoge", { value: "OK" }); // TypeError: property descriptors must not specify a value or be writable when a getter or setter …

constructor プロパティについて

説明をつけておくと、constructor プロパティは、オブジェクト作成時に自動的に生成されるプロパティで、そのオブジェクトが生成されたときに使われたコンストラクタが参照されています。 ミックスインパターン new this.constructor() の利用 - わからん た…