JavaScript

Firefox 17 から Map と Set がイテラブルになった件について

Firefox 17.0 リリースノート さて、Firefox 17 がリリースされました。そのリリースノートに、以下の様なのがあります。 JavaScript の Maps と Sets がイテラブル (反復可能なオブジェクト) として利用できるようなりました。 これはどういうことなのかを…

WeakMap を使ったプライベートな値

見えてきた「ECMAScript 6」。JavaScriptの生みの親が書く「Harmony of Dreams Come True」 − Publickey で WeakMap の紹介があったことだし、ちょっと使えそうなネタでも書いておくよ。WeakMapを使って、インスタンス毎にプライベートな値を持てるようにし…

constructor プロパティについて

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

名前空間付き属性のあれこれ (属性のプロパティ値とXMLSerializer, DOMParser)

各実装によっていろいろ挙動が異なることを発見したのでメモっておく。以下のブラウザで確認した。 Firefox 15.0.1 GoogleChrome 23.0.1262.0 dev-m Opera 12.50 <update> コメント欄参照。 通常のHTMLでは名前空間に対応しない仕様みたい。XHTMLにしてやったら大抵</update>…

CSPとグローバルオブジェクトの取得

グローバルオブジェクト、通常のWeb上のJavaScriptではwindowオブジェクトのことになるが、最近のJavaScriptではWeb上で動くものとは限らないこともあって、汎用的に取れる手段が確立されている。まぁ、通常は var global = this; で良い。 (function(global…

Nightly で ES.next で追加されている String.prototype の一部が実装された

Bug 772733 - (harmony:stringextras) implement harmony string methods ということで、以下のメソッドが追加された String.prototype.startsWith( searchString [, position ]) String.prototype.endsWigth( searchString [, endPosition ]) String.protot…

Nightly で Function.toString() の挙動が変わった

いつから変わっていたか、分からないけど...。 function sum(){ // 引数を全部足すよ return Array.reduce(arguments, function (result, current) { return result + current; }); } sum(1,2,3,4,5); sum.toString(); 下記画像は上記コードを書いた結果であ…

Nightly で __proto__ の挙動が変わった

以前、__proto__プロパティの不思議というものを書いたが、Firefox Nightlyで、この __proto__ プロパティに変更が入った。 Bug 770344 - Experiment implementing __proto__ as an accessor Firefoxでは元々、Object.prototypeのプロパティに __proto__ が…

Firefox Nightly で構文とかAPIとかオプションが追加された

一気に紹介 spread array テストコード:mozilla-central mozilla/js/src/jit-test/tests/basic/spread-array.js var a1 = [2,3,4,5]; var a2 = [1, ...a1, 6]; // => [1,2,3,4,5,6] なんていうか、Array#concatみたいな感じでもある。[ ...arryObj, ]とする…

Re: ECMAScript 5, Array.isArrayを非対応ブラウザでも使いたい « イナヅマtvログ

Array.isArray MDN: isArray ECMAScript 5で追加になったArray.isArrayを使えば大丈夫。 非対応ブラウザでも使用可能なコードが紹介されています。 ECMAScript 5, Array.isArrayを非対応ブラウザでも使いたい « イナヅマtvログ 紹介されている、MDN(Mozilla …

ES.next のデフォルトパラメータが Firefox Nightly で実装された

757676 – implement harmony default parameters mozilla-central: changeset 95044:699a613bf616 function hoge (arg = "hogehoge") { return arg; } hoge("foo"); // "foo"; hoge(); // "hogehoge" えーと、もう分かると思うけど、引数が与えられなかった…

Re: JavaScriptでJava風にsuperクラスにアクセスするライブラリ作った :右京web

JavaScriptでJava風にsuperクラスにアクセスするライブラリ作った :右京web 追記:prototypeチェーンにsuperが2つ絡むとループすることに気がついた・・・のだけど、解決法がわからん。superは一回だけでお願いします(これはひどい)。 解決させようと考えてみ…

ES.next の FunctionRestParameter が Firefox Nightly で実装された

574132 – Prototype Harmony's rest parameters in SpiderMonkey mozilla-central: changeset 94717:dd094709d5b9 13 Function and Generators - ECMAScript Syntax Grammar 6th Edition / Draft 何かというと、関数の引数をまとめて配列で得られるようにな…

jscomplete を neocomplcache プラグインに対応させた

jscomplete - hogehoge https://github.com/teramako/jscomplete-vim id:basyura さんが neco のプラグインにならないかなぁ(チラチラ と言っていて、恥ずかしながら初めてneocomplcacheがプラグインで拡張できることを知った。どういう良さがあるのかとか…

jscomplete-vim ちょっと賢くした(Addtive, Multiplicative Operator編 + α)

jscomplete-vim teramako/jscomplte-vim - GitHub ちょっとずつ賢くしてます。+-*/%の演算子の演算を少し加えた。 ただし、数値の演算はかなり適当というか、Vim script に NaN がなく、演算が失敗する時は 0 が返る仕様っぽいため、JavaScriptでは NaN が返…

jscomplete-vim

https://github.com/teramako/jscomplete-vim 既存のvimに入っているautoload/javascriptcomplete.vimがアレだったので、もう少し賢そうなのを作りたいと思い、作り始めた。初めてのVim scriptなので拙いコードだと思うけど。ある程度目的は達成できてきたと…

ECMAScriptで提案されている arrow function について

ECMAScript6では、functionの代わりに=>を使えるようになる http://css.dzone.com/articles/exciting-future-javascript-0 ES6、だいぶドラスティックな変更に傾きつつあるよう。ES4の二の舞にならないといいのですが・・ 2012/04/03 BBCがレスポンシブデザ…

Firefox 13.0a1 (Nightly) で for-of ステートメントが実装されました

Firefox 13.0a1 (Nightly 2012-02-09) あたりから、ES.next の新たな構文である、for-ofステートメントが追加されました。 Bug 699565 – Implement Harmony for-of loops harmony:iterators [ES Wiki] for...of - MDN この構文は、配列の様なオブジェクトに…

Nightly(Firefox 12.0a1) の about:newtab で表示するアイテム数を増やす

aboutURLに対してスクリプトを実行できる Scriptish でやってみた。about:config 等からbrowser.newtabpage.enabledとextensions.scriptish.enabledSchemes.aboutをtrueにしておく。 3分クッキングみたいな気分で書いたので、ハードコーディングされていたり…

v8 エンジンの代入演算子(=)のバグ

登録した http://code.google.com/p/v8/issues/detail?id=1901 ECMAScript 5.1の仕様では Let lref be the result of evaluating LeftHandSideExpression. Let rref be the result of evaluating AssignmentExpression. Let rval be GetValue(rref). Throw a…

console.log は printf 相当の機能が一部ある

ある値を非同期で取ってくる→その値を使ってさらに非同期処理というのをJSDeferredでする - Islands in the byte stream 何気なく書かれているけど、console.log('got %s', foo);という部分があり、おや?と思った。もしかして、Node.js 以外でも使えたりす…

NoScript っぽいもの

Opera ユーザスクリプトの話。 ちょい、NoScript っぽいものを作成中 基本方針 オレ、オマエのスクリプト実行しない 許可したものは特別に動かす オレ、オレのスクリプト実行する Operaの不満点 Operaはいろいろとカスタマイズが効く。サイト単位で制御が効…

chrome --js-flags="--harmony"

GoogleChromeのdevチャンネルでタイトルの様なコマンドラインオプションを付けると、ES Harmonyの機能を幾つか使えるみたい。元ネタ: https://mail.mozilla.org/pipermail/es-discuss/2012-January/019133.html ブロックスコープ harmony:block_scoped_bind…

__proto__プロパティの不思議

__proto__プロパティ周りでJavaScript実装によっていろいろ挙動が異なることが分かったのでメモ。以下のブラウザ(エンジン)で調べた Firefox 9.0.1 (Gecko 20111220165912) GoogleChrome 17.0.963.12 dev-m (v8 ???) Opera 12.00 alpha (Presto 2.10.238) ま…

uncurryThis 関数

http://wiki.ecmascript.org/doku.php?id=conventions:safe_meta_programming にて大変有用な書き方を身に着けた。 Function.prototype.bindとFunction.prototype.callの黒魔術的なもの。 obj.hasOwnProperty("prop"); と書くところをcallで書くと var func …

SpiderMonkeyのErrorオブジェクト

Confused by Firefox: own property with a descriptor not listed by getOwnPropertyNames() FirefoxというかSpiderMonkeyがなんか変。 var e = new Error("hoge"); print("getOwnPropertyNames: " + Object.getOwnPropertyNames(e).toSource()); print(Obj…

E4Xのプロパティアクセスと比較演算子

今度はみんな僕が大好きなE4Xの不思議に迫るよ!実はこれ、Firefox Hacks Rebootedにも少し書いた内容だけど良いよね。最初に書いておくと、「E4Xすばらしい! これからどんどん使っていこう!」という内容ではない。残念ながら。むしろ、捨てましょう、とい…

letへの異常な愛情、(ry

JavaScript Advent Calendar 2011 (オレ標準コース) : ATND 2日目にチョンボをして申し訳ありませんでした。 7日目は1日目にconstさんがconstについて書いてくれたので僕はletで!ただし、ES.nextのletではなく、現状のMozilla JavaScript (mozjs と略すよ) …

【跡地】letへの異常な愛情、(ry

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…

Minibuffer Exploit

GreasemonkeyのユーザスクリプトであるMinibufferに脆弱性があるよって話。Scriptishでも同様ですよ Minibuffer for Greasemonkey Minibufferが動く状態で、↓のページにアクセスしてみよう http://www.paw.hi-ho.ne.jp/makochi/test/minibuffer.html ただし…