AddItem の解説。
Dorothy2 スクリプト内から Irvine に新しいキューアイテムを追加するオブジェクトです。
Read the rest of this entry »
AddItem の解説。
Dorothy2 スクリプト内から Irvine に新しいキューアイテムを追加するオブジェクトです。
Read the rest of this entry »
http://peace.2ch.net/test/read.cgi/win/1394240473/715-719n より。
for (var a = xxx, y = yyy; ...; ) { ... } のように for() 文で複数の変数を宣言するとグローバル変数として定義されてしまいます。
function test () {
for (var x = 0; false;) { }
for (var y = 0, z = 'a'; false;) { }
}
var z = { a: 1 };
test ();
alert (typeof x); // undefined
alert (typeof y); // number
alert (typeof z); // string
// このような関数を
Array.prototype.map = function (callback) {
~
};
// このように呼び出すと
Array.prototype.map.call ('foo', function (x) { ~ });
// 以降、map が勝手に fcfCall モードで動作してしまう
var a = [ ~ ].map (function (x) { ~ });
ただ、組み込みメソッドは .call、.apply にアクセスしようとするとエラーになるので、DMonkey では「普通の呼び出し方でも .call() または .apply() でも使える」というメソッドはまず見かけません。
今回の例のようにポリフィルを実装するなら、.call、.apply は使えないと説明しておけばよいと思います。
var s = new String ('foo');
s.map = Array.prototype.map;
のような呼び出し方であれば問題ないはずです。
なお、関数オブジェクトを this に割り当てようとすると Global に差し替えられるようです(詳細は未調査)。
今回の記事は勢いで書いたのでどこか間違いがあるかも知れないのでご注意下さい。
関数オブジェクト . プロパティ名
プロパティ名は prototype、call、apply のみ使用できる。
call は関数オブジェクトの動作モードを fcfCall モードに変更し、関数オブジェクト自身を返す。
apply は関数オブジェクトの動作モードを fcfApply モードに変更し、関数オブジェクト自身を返す。
fcfCall モードの関数オブジェクトに対し .apply 演算を行うと fcfApply モードに変更される。逆も同じ。
function a () { }
alert (a === a.call); // true
function b () { }
alert (b === b.apply); // true
function c () { }
alert (c.call === c.apply); // true
alert (c.call.apply.call.apply === c.apply.call.apply.call); // true
関数オブジェクトを通常モードに戻す手段は、恐らくない。
なお、Bracket notation のつもりで
関数オブジェクト [ "call" ]
と書くと DMonkey の言語仕様により "call" を引数とした関数呼び出しが行われてしまうので、Dot notation でしかアクセスできない。
( )(または[ ])
fcfCall モードの関数を引数付きで呼び出すと .call() の動作が実行される(第1引数が this、あれば第2引数以降が arguments)。
fcfApply モードの関数を引数付きで呼び出すと .apply() の動作が実行される(第1引数が this、あれば第2引数の配列が arguments)。
それ以外、つまり通常モードの関数や fcfCall モードまたは fcfApply モードの関数を引数なしで呼び出した場合は通常の関数呼び出しとして実行される(ただし this が何になるかは違いが出る)。
使ってないので設定ファイルから削除。日付古いですが、前回からちょっと変わってます。
Name = "Enemy wiki Normalizer (2011-08-18; rentan)"
Active = TRUE
URL = "www21.atwiki.jp/enemy/$TYPE(htm)"
Limit = 2000
Match = "color=$AV(#(66|80|99|C0)+{3})$SET(#=color="#800080")"
"|style=$AV((*;|) color: (#999999|#808080|rgb \((153,153,153|128,128,128)\))(;*|))$SET(#=style="color: #800080")"
"|style=$AV((*;|) background(-color|): (#ffffcc|rgb \(255,255,204\))(;*|))"
"|"
"(<br /+> )++{1,*}(<br /+> </(dt|dd|font|strong)>)\#"
"|(<br /+> </(font|strong)>)\# <br /+>"
"|</p> <p>(\s|[%c2][%a0])+(</p>)\#"
"|<p>(\s|[%c2][%a0])+</p> (<p>)\#"
"|"
"<link\srel=$AV(stylesheet) type=$AV(text/css) href=$AV(http://www21.atwiki.jp/_skin/base_006red.css*)*>"
"$SET(#=<style type="text/css">"
"dt { margin-top: 1em; }"
"</style>)"
"|"
"(<img*>&&*src=$AV(http://analyzer.dip.jp/cgi/*)*) <br /+>"
"|"
"$NEST(<div,\sid=$AV(at_social_links)*,</div>)"
Replace = "\@"
alert (Math.abs (Number.POSITIVE_INFINITY)); // 0
alert (Math.abs (Number.NEGATIVE_INFINITY)); // 0
この 0 は整数型の 0 です。浮動小数点型の 0.0 ではありません。
NaN は真の値として評価されてしまいます。
alert (NaN ? 't' : 'f'); // t
try {
alert (9223372036854775296.int);
//alert (-9223372036854775296.int); でも同じ
}
catch (e) {
alert ('error=' + e);
}
9223372036854775296 以上の数、または -9223372036854775296 以下の数の .int プロパティを参照すると、try catch で捕捉できないエラーが発生します。

もっとも .int を参照することは普通はないので気にしなくても平気だと思います。普通じゃないスクリプトを書くとしても何か役に立つことがあるのかは不明です。
number 型は内部で整数型と浮動小数点型に分かれているのですが、=== 演算子はそれぞれを別の型と見なしてしまい、数値として等価であっても false になります。
alert (1 === 1.0); // false
alert (parseInt ('1') === parseFloat ('1')); // false
!== 演算子は左辺と右辺の型が違うと false になる不具合が内部型にも該当し、数値として等価でなくてもfalse になります。
alert (1 !== 2.0); // false
alert (parseInt ('1') !== parseFloat ('2')); // false
厳密な比較を行う ===、!== 演算子ですが、!== の方は左辺と右辺の型が違うと false になってしまいます。
alert (1 === 1); // true
alert (1 === 2); // false
alert (1 === '1'); // false
alert (1 !== 1); // false
alert (1 !== 2); // true
alert (1 !== '1'); // false
PC カテゴリーの記事を表示しています。