javascript arguments sample codes
JavaScript the definitiveguide 6th Edition (page175)にあったargumentsのサンプル。
smjsで実行できるものを書いてみた。
ついでにargumentsは配列ライクで不便なところもあるので、Arrayから、その機能を借りるサンプルは以下のように書く。from JavaScript Patterns
smjsで実行できるものを書いてみた。
// javascriptらしい自由度の高いsum
var isArray = Function.isArray || function(o) {
return typeof o == "object" &&
Object.prototype.toString.call(o) == "[object Array]";
};
function flexisum(a) {
var total = 0;
for (var i = 0; i < arguments.length; i++) {
var element = arguments[i], n;
// Ignore null and undefined arguments.
if (element == null) continue;
if (isArray(element))
n = flexisum.apply(this, element);
else if (typeof element == "function")
n = Number(element());
else n = Number(element);
if (isNaN(n))
throw Error("flexisum(); can't convert " + element + " to number");
total += n;
}
return total;
};
var test = function() {
return 5;
};
var test_str = function() {
return "9";
};
var ar_test = [1,1];
print(isArray(ar_test));
// 配列の中に他の配列や関数が含まれていても動作
var t = flexisum(1, test, ar_test, 3, null, test_str);
print(t);
実にjavascriptらしい、自由なsumサンプルである。特殊な用途向けかもしれないが知っておいて損はないと思った。ついでにargumentsは配列ライクで不便なところもあるので、Arrayから、その機能を借りるサンプルは以下のように書く。from JavaScript Patterns
function arg_test() {
var s = [].slice.call(arguments, 3);
return s;
};
var result = arg_test(1, 2, 3, 4, 5);
print(result); // 4,5
コメント
コメントを投稿