2013-01-01から1年間の記事一覧

ソーシャルボタンのJavaScriptでfunctionの前に「!」がついている理由

結論から言うと、単なる格好付けです。以下説明。主要なJavaScript (ECMAScript 5th)では、functionは2種類あります。 文(Statement) *1 式(Expression) です。所謂、「即時関数」と呼ばれるものはfunctionは式(Expression)である必要があります。何故なら、…

要素リストをループで回して addEventListener するみたいな、よくあるサンプルを断罪してみる

function setButtonHandler () { var buttons = document.querySelectorAll(".hogeButton"); for (var i = 0, len = buttons.length; i < len; ++i) { (function(n) { buttons[i].addEventListener("click", function() { alert(n); }); }(i)); } } って感じ…

Firefox 24(Nightly) で DOM Future が実装された

856410 - Implement promises DOM Future ではなく、すでに、Promise に名前が変わっているけど、実装されたのは Future 。 This feature used to be called futures. 4 Promise - DOM Standard テストコード: mozilla-central mozilla/dom/future/tests/tes…

hidden 属性

要素の表示/非表示をトグルするベストプラクティス - hogehoge コメント欄にて id:Syoichi さんに hidden 属性の存在を教えてもらった。 IEではまだ実装されておらず、マークアップ上の意味を考慮する必要もありますが、将来的にはhidden属性も選択肢の一つ…

要素の表示/非表示をトグルするベストプラクティス

[JavaScript] tr要素 の display プロパティを用いた表示切替えについて | Blog | Development Reference を読んで、display = "block" はアカンやろ、と思ったので書いておく。 <div id="foo"> <p>FOO</p> </div> div#foo を JavaScript から表示/非表示をするには。 ダメパターン func…

Note 的な aside 要素をネガティブマージンを使わずに

こんな感じの、NOTE部分は ::before 等のCSSで書き、回り込みなしのブロックを作るやり方を模索してた。 ネガティブマージン まぁ楽ではある aside.note { padding-left: 6em; } aside.note::before { content: "NOTE"; margin-left: -5em; float: left; } <aside class="note"> <p></p></aside>…

Firefoxのアクセスキー

備忘録 <button accesskey="F">hoge</button> にどうやってキーボードをアクセスするか。about:config から設定可能であり、デフォルト値が OS によって異なる。キーとなるのは ui.key.generalAccessKey ui.key.contentAccess ui.key.chromeAccess ui.key.generalAcessKey OSに関係なく、デ…

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() …

問題:どれが「クロージャ」でしょうか?

func1 から func10 までのどれが「クロージャ」でしょうか? var scope = "global"; function func1 () { return scope; } var func2 = function () { return scope; }; var func3 = new Function("return scope;"); function foo () { var scope = "functio…

回答:どれが「クロージャ」でしょうか?

問題:どれが「クロージャ」でしょうか? - hogehoge の回答期待させて申し訳ないですが、はっきりとした解等を定めていません。ということで解答ではなく、回答で。クロージャの定義を以下の様に定めました。 引数以外の変数を実行時の環境ではなく、自身が…

イベントハンドラの this と event.target, +α

[JavaScript]for 内でイベントリスナとか登録するときにやっちゃいがちな間違い. とその対処法を3つほど. | TM Life 対応その2: event.targetを使う と 対応その4 : this を使う について上記サイトで書いてあることが間違っているというわけじゃないんだ…

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…

Firefox 21 個人的まとめ

ちょっとフライング気味だけど WebPlatform 系 Style[scoped] のサポート (Bug 508725) <main> のサポート (Bug 820508) window.crypto.getRadomValues (Bug 440046) Web Cryptography API[W3C] window.crypto.getRandomValues - Document Object Model (DOM) | MD</main>…

v8エンジンの __proto__ が getter/setter になってた

28.0.1500.3 (Official Build 198635) dev-mで確認以前確認した時はまだDataDescriptorだったから、また変更されたみたい。 > Object.getOwnPropertyDescriptor(Object.prototype,"__proto__") Object {get: function, set: function, enumerable: false, co…

s-bit, sticky-bit について

今更ながら、基本のおさらい s-bit (sビット) setuid, setgid のことで、そのファイルのオーナーまたはグループの権限で実行するただし、各オーナーやグループに実行権が付いている、かつ、実行するユーザが実行できるパーミッション(オーナーかグループか…

Firefox 20 個人的まとめ

システム内の E4X 無効化 javascript.options.xml.chrome Firefox 21 でこのオプションすら消える予定 for-each 文の事実上の無効化 コンテンツ上では<script type="text/javascript;version="1.6">等とバージョン指定しないと使えない Map.prototype keys, values, entries の追加 817368 - Map.prototyp…

switch と case のインデントレベル

主に2種類あると思う。 switch (expr) { case expr1: break; case expr2: break; default: // ... } と switch (expr) { case expr1: break; case expr2: break; default: // ... } ボクは、前者がお勧めだと思っている。jslint ? そんなの知りません。 vim…

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…

Firefox 22(Nightly) で ArrowFunction が実装されたが、扱いが難しい

Firefox Nightly (22) に ES6のArrow Function来たる - fragmentary ということで、早速試しているわけです。 基本 var f1 = () => "OK"; // 引数なしの場合は、"()"が必須 var f2 = arg => arg + 1; // 引数一つなら、"()"は省略可 var f3 = (arg1, arg2) =…

Object.setPrototypeOf を作る

https://mail.mozilla.org/pipermail/es-discuss/2013-March/029259.html で気付かされた。Firefox なら Object.setPrototypeOf を作ることができる。Firefox、というよりも、SpiderMonkey なのだが、Object.prototype.__proto__がgetter/setterで定義されて…

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

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

Symbol でプライベートな値を作る

ChromeのExperimental WebKit/JavaScript Features - fragmentary Experimental JavaScript Features の方に Symbol が使えると書かれていたので早速。Symbol ってのはなんて言うか、固有のプロパティのキーになれるもの?っていう説明で良いのかな。 var s …

Chrome Canary には document.webkitRegister があった

昨日はFirefox Nightlyにdocument.registerが実装されたって話を書いたが、もしやChrome Canaryにもあるんじゃ?と思って見てみたら、あった。 Bug 100229 - [Custom Elements] Implement bare-bone document.register() チェンジセット 143865 – WebKit た…

Firefox 22(Nightly) で WebComponents の document.register が実装された

783129 - Implement the document.register interface method mozilla-central: changeset 123773:871fea464883 カスタム要素が作れるようになった。DOM要素は単にDOM APIを呼び出すだけの存在だったのが、独自のメソッドとかを追加できるようにったわけで、…

ユニコード文字のbase64エンコード/デコード

今のところAPIがあるのが、Firefoxのみかもだけど。単純に、window.btoa("あいうえお")とすると、InvalidCharacterError: String contains an invalid characterと例外が発生する。Encoding StandardのTextEncoder、TextDecoderが使えるなら、以下のように書…

GoogleChrome(27.0.1425.2 dev-mあたり) の __proto__ 挙動が変わった

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…

Array + Set で検索を高速に

Array#indexOf(item) !== -1をやって存在を確認するのが、どうにも速い気がしなくてやってみた。とりあえず、Array.indexOf vs Set.has · jsPerfで速度確認。Set#hasが圧倒的に速い。かと言って、単純な Set では以下の点で使いづらい 値の順番操作が面倒 入…

getEventListeners(node)

constructor.members_に使えるメソッド名一覧があることを発見して、getEventListeners(node)で、そのnodeでリッスンしているハンドラが取れる事を知った。デバッグに役に立ちそう。 参考 Command Line API Reference - Chrome Developer Tools — Google Dev…

JSON.parse('{"__proto__": null}')

var o = JSON.parse('{"__proto__": null}'); console.log( Object.prototype.hasOwnProperty.call(o, "__proto__"), Object.getPrototypeOf(o), o instanceof Object, Object.getPrototypeOf(o) === Object.prototype ); Browser hasOwnProperty instanceof…