Eli*_*rey 5 javascript parameters
我想知道有人如何在函数中获得无效的形式参数,而没有arguments对象模拟不知道参数解构赋值的格式.这不是ECMAScript问题,仅适用于JavaScript.
你mySolution无法访问arguments或test.您将获得一个args包含参数名称的数组.必须返回一个对象,该对象具有每个参数的属性,该参数是传递给函数的参数.总之,results[prop]必须=== test[prop].您的解决方案不应该依赖于错误或安全漏洞,因为它们将来可能不存在.我想到的这个问题的解决方案不依赖于任何错误.
(function () {
function mySolution ({
var,
this,
function,
if,
return,
true
}) {
// prohbit reference to arguments and the test object
var test = arguments = null,
args = ['var', 'this', 'function', 'if', 'return', 'true'],
results = {};
// put your solution here
return results;
};
var test = {
"var" : {},
"this" : {},
"function": {},
"if" : {},
"return" : {},
"true" : {}
},
results = mySolution(test),
pass = true;
for (var prop in test)
if (test.hasOwnProperty(prop))
if (results[prop] !== test[prop])
pass = false;
alert(pass ? "PASS" : "FAIL")
}());
Run Code Online (Sandbox Code Playgroud)
这是我接受的两种可能的解决方案之一:
(function () {
function mySolution ({
var,
this,
function,
if,
return,
true
}) {
// prohbit reference to arguments and the test object
var test = arguments = null,
args = ['var', 'this', 'function', 'if', 'return', 'true'],
results = {};
var i = args.length;
while (i--) {
results[args[i]] = eval("function::" + args[i]);
// function::[args[i]] won't work unless you eval() it
}
return results;
};
var test = {
"var" : {},
"this" : {},
"function": {},
"if" : {},
"return" : {},
"true" : {}
},
results = mySolution(test),
pass = true;
for (var prop in test)
if (test.hasOwnProperty(prop))
if (results[prop] !== test[prop])
pass = false;
alert(pass ? "PASS" : "FAIL")
}());
Run Code Online (Sandbox Code Playgroud)
该解决方案通过将默认function::命名空间与eval()范围结合使用来工作.
例如:foo.function::bar和foo.function::['bar']是一样的foo.bar.
100分
(function () {
function mySolution ({
var,
this,
function,
if,
return,
true
}) {
// prohbit reference to arguments and the test object
var test = arguments = null,
args = ['var', 'this', 'function', 'if', 'return', 'true'],
results = {};
// put your solution here
var getEscUnicode = function(str) {
var ret = "";
for(var j = 0; j < str.length; j++) {
var temp = parseInt(str.charCodeAt(j)).toString(16).toUpperCase();
for(var i=0; i < 5 - temp.length; i++) {
temp = "0" + temp;
}
ret = ret + "\\u" + temp;
}
return ret;
}
for(var i = 0; i < args.length; i++) {
results[args[i]] = eval(getEscUnicode(args[i]));
}
return results;
};
var test = {
"var" : {},
"this" : {},
"function": {},
"if" : {},
"return" : {},
"true" : {}
},
results = mySolution(test),
pass = true;
for (var prop in test)
if (test.hasOwnProperty(prop))
if (results[prop] !== test[prop])
pass = false;
alert(pass ? "PASS" : "FAIL")
}());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2197 次 |
| 最近记录: |