Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否可以使用JSFuck约定使用2个或更多参数调用函数?_Javascript_Jsfuck - Fatal编程技术网

Javascript 是否可以使用JSFuck约定使用2个或更多参数调用函数?

Javascript 是否可以使用JSFuck约定使用2个或更多参数调用函数?,javascript,jsfuck,Javascript,Jsfuck,假设我有一些字符串,我想使用函数“replace”(忽略console.log和头部的白色字符) console.log( “真假”[“替换”](“真”) )问题2有一个简单的解决方案:更喜欢新的RegExp构造函数;e、 g./e/g变成newregexp('e','g') 如果不依赖于…操作员,以下内容将解决问题1: 我们可以取代: console.log('a', 'b', 'c'); 与: console.log(…['a'].concat(['b']).concat(['c'])

假设我有一些字符串,我想使用函数“replace”(忽略console.log和头部的白色字符)

console.log(
“真假”[“替换”](“真”)

)
问题2有一个简单的解决方案:更喜欢
新的RegExp
构造函数;e、 g.
/e/g
变成
newregexp('e','g')

如果不依赖于
操作员,以下内容将解决问题1:

我们可以取代:

console.log('a', 'b', 'c');
与:


console.log(…['a'].concat(['b']).concat(['c'])问题2有一个简单的解决方案:更喜欢
新的RegExp
构造函数;e、 g.
/e/g
变成
newregexp('e','g')

如果不依赖于
操作员,以下内容将解决问题1:

我们可以取代:

console.log('a', 'b', 'c');
与:


console.log(…['a'].concat(['b']).concat(['c'])通过使用
Array.prototype.reduce
可以将两个参数传递给函数

其思想是对具有2个值的数组调用
reduce
,并只向其传递一个参数(callback)(即,没有用于reduce起始值的参数)。这样,该数组的第一个和第二个值将用作回调的参数,回调将只被调用一次

在您的示例中,具有2个值的数组必须是:

["true", "1"]
可使用
concat
形成:

["true"]["concat"]("1")
然后调用
reduce
,并将
replace
作为回调函数传递:

["true"]["concat"]("1")["reduce"]("truefalse"["replace"])
现在要解决的唯一问题是确保使用正确的
this
-绑定调用回调,因为“truefalse”现在在回调调用的实际调用中不起作用。我们可以通过调用
.bind
来解决这个问题:

所以要计算的表达式是这个

console.log(
[“真”][“concat”](“1”)[“减少”](“[“替换”][“绑定”](“真假”))

);通过使用
Array.prototype.reduce
可以将两个参数传递给函数

其思想是对具有2个值的数组调用
reduce
,并只向其传递一个参数(callback)(即,没有用于reduce起始值的参数)。这样,该数组的第一个和第二个值将用作回调的参数,回调将只被调用一次

在您的示例中,具有2个值的数组必须是:

["true", "1"]
可使用
concat
形成:

["true"]["concat"]("1")
然后调用
reduce
,并将
replace
作为回调函数传递:

["true"]["concat"]("1")["reduce"]("truefalse"["replace"])
现在要解决的唯一问题是确保使用正确的
this
-绑定调用回调,因为“truefalse”现在在回调调用的实际调用中不起作用。我们可以通过调用
.bind
来解决这个问题:

所以要计算的表达式是这个

console.log(
[“真”][“concat”](“1”)[“减少”](“[“替换”][“绑定”](“真假”))

);
您可以创建正则表达式,而无需键入
/
newregexp('e','g')
。你也可以使用
String.fromCharCode
(例如
String.fromCharCode(47)=='/'
)@Gershom实际上是通过
new Regexp
将问题2简化为问题1(或者至少我们接近解决方案,如果存在的话)-将你的评论写下来,作为我给出的答案+1。fromCharCode的第二部分是有问题的,因为它会生成字符串,要“运行”它,您应该使用
eval
或其他东西。您可以创建一个正则表达式,而不必键入
/
新的RegExp('e','g')
。你也可以使用
String.fromCharCode
(例如
String.fromCharCode(47)=='/'
)@Gershom实际上是通过
new Regexp
将问题2简化为问题1(或者至少我们接近解决方案,如果存在的话)-将你的评论写下来,作为我给出的答案+1。fromCharCode的第二部分是有问题的,因为它会生成字符串,要“运行”它,你应该使用
eval
或一些你想使用的东西
apply
,而不是
call
null
不是
this
所需的值,但这对于任何例子都可以解决。啊,你是对的,您还提出了一个问题:
.apply
需要两个参数(
null
和数组本身),因此需要一个逗号。。。我需要考虑一下。事实上,逗号让我们回到了第1步;-)(3)
是禁止的:P您可以使用
[]()+双引号
和字母。例如,我不能使用
“truefalse”[“replace”]。调用
,但我可以
“truefalse”[“replace”][“call”]
(但是,
有不同的含义,所以如果你想使用它,你需要展示如何将它们替换为上述限制是的,我认为这是完全不可能的。
新功能(/*code*/)
是jsfuck的主密钥,没有它,您的操作能力就非常有限。您需要使用
apply
,而不是
call
,并且
null
不是(总是)
this
所需的值,但这在任何情况下都可以解决。啊,你是对的,你提出了一个额外的问题:
。apply
将需要两个参数(
null
和数组本身),因此需要一个逗号……我需要考虑一下。事实上,逗号让我们回到第1方;-)(3)
是禁止的:P您可以使用
[]()!+
双引号
和字母。例如,我不能使用
“truefalse”[“replace”]。调用
但我可以
使用“truefalse”[“replace”[“call”]
(但是,
有不同的含义,所以如果你想使用它,你需要展示如何将它们替换为上述限制是的,我认为这是完全不可能的。
新函数(/*code*/)
是jsfuck的主键,没有它你就无法使用