Javascript 是否可以使用JSFuck约定使用2个或更多参数调用函数?
假设我有一些字符串,我想使用函数“replace”(忽略console.log和头部的白色字符)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'])
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的主键,没有它你就无法使用