相关疑难解决方法(0)

为什么++ [[]] [+ []] + [+ []]返回字符串"10"?

这是有效的,并返回"10"JavaScript中的字符串(此处更多示例):

console.log(++[[]][+[]]+[+[]])
Run Code Online (Sandbox Code Playgroud)

为什么?这里发生了什么?

javascript syntax

1613
推荐指数
9
解决办法
20万
查看次数

(![] + [])[+ []] ...解释为什么会这样

alert((![]+[])[+[]]+(![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]);
Run Code Online (Sandbox Code Playgroud)

此代码的输出是:fail.为什么?

顺便说一句(![]+[])[+!+[]] == 'false'[1],对吗?但为什么![]+[] == "false"和为什么+!+[] == 1

javascript

103
推荐指数
1
解决办法
1万
查看次数

为什么以及如何([![]] + [] [[]])[+!+ [] + [+ []]]评估为字母"i"?

在阅读dzone上发布的这篇文章时,我发现了一段最初由Marcus Lagergren在Twitter上发布的JavaScript片段.

以下代码显然打印字符串 "fail"

(![]+[])[+[]]+(![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]];
Run Code Online (Sandbox Code Playgroud)

这涉及隐式类型转换,我试图理解这条线的解释方式.

我已经隔离了每个角色

  • (![]+[])[+[]] 版画 "f"
  • (![]+[])[+!+[]] 版画 "a"
  • ([![]]+[][[]])[+!+[]+[+[]]] 版画 "i"
  • (![]+[])[!+[]+!+[]] 版画 "l"

我还设法打破了每个字母除外的表达式 "i"

信件 "f"

![]空数组是一个对象,它根据ECMAScript的文档,点9.2的计算结果为true当转换为一个boolean,所以这是false

false+[]根据Point 11.6.1,二元+运算符的两个参数都转换为String,因此我们得到"false"+"",它进行求值"false"

+[]如果参数是a,则一元加号运算符会导致ToNumber转换,然后ToPrimitive转换Object.通过调用[[DefaultValue]]对象的内部方法来确定这种转换的结果.如果是空数组,则默认为0.(ECMAScript的文档,章节:11.4.6,9.3,9.1)

"false"[0]我们正在访问索引处的字符0,因此"f"

信件 "a"

同样的故事,这里唯一的区别是方括号中的部分中的额外转换(其计算为指向字符串中另一个字符的数字"false"),由使用一元+!运算符触发.

+[]0 …

javascript obfuscation types ecmascript-5

41
推荐指数
1
解决办法
2408
查看次数

为什么(([] === [])+/ - /)[1] ='a'和(1 + {})[(1 << 1)+1] ='b'在javascript中?

最近我遇到了一个有趣的网站,它说明了一个Javascript Obfuscator:http://bl.ocks.org/jasonsperske/5400283

例如,(([]===[])+/-/)[1]给出a(1+{})[(1<<1)+1]给出b.

我努力理解这些混淆结果的评估顺序但是徒劳无功.

(1+{})[(1<<1)+1]作为一个例子,据我所知,<<是按位移位运算和将返回2,所以表达式变为(1+{})[3].但我不明白这是什么意思1+{}[3].

谷歌对这个问题并不是很有帮助,因为搜索引擎不喜欢括号或斜线,所以如果有重复的问题,我很抱歉.

javascript

6
推荐指数
1
解决办法
225
查看次数

没有函数调用的模糊代码

我已经看到了仅使用运算符并""执行复杂字符串操作的代码示例.基本上,这个想法就是((+"+")+"")[+""]给你一封信N等等.我忘了找到它的地方,而且我没有找到合适的谷歌关键词.有没有人手头有链接?

javascript obfuscation

1
推荐指数
1
解决办法
159
查看次数

Jquery循环表单检查所有空字段然后执行一个函数

我试图循环形式检查空字段然后执行和功能.我现在正在使用下面这个我在这个网站上找到的东西,但是发生了什么,每个循环检查1字段,并看到1不是空的,仍然执行其他功能.我想我需要立即检查所有然后执行下一个功能.我怎么能实现这个目标?

if($('.enter-info--ownerInfo .req').val() != "") {
   alert("Empty Fields!!")
    } else {
    run this function
    }  
Run Code Online (Sandbox Code Playgroud)

谢谢...

javascript forms jquery

0
推荐指数
1
解决办法
6837
查看次数

这段代码如何提醒"n"?

以下代码警告"n".这段代码是如何工作的?

alert(([]+[][1])[[[+!-[]][0]]])
Run Code Online (Sandbox Code Playgroud)

javascript

0
推荐指数
1
解决办法
83
查看次数

为什么javascript在添加时会将对象更改为其他内容?

有人指出在javascript中添加空数组有趣,我不知道为什么它的工作方式如此.

添加空数组会产生一个字符串.

换句话说,[] + []回报""

我启动了我的控制台来测试它,果然,它确实有效.我进一步发现这种行为不仅限于空数组.数字,字符串,数组和对象的数组在添加到任何其他数组时都会变成字符串.一些例子是:

[1] + [] //returns "1"
[1] + [2] //returns "12"
[1,2,3] + [2] //returns "1,2,32"
[{foo:'bar'},'foo','bar'] + [] //returns "[object Object],foo,bar"
Run Code Online (Sandbox Code Playgroud)

当添加到其他任何对象时,它也会与其他对象一起出现,但仅当对象位于右侧时才会出现.如果它在左侧,则对象变为0.

'foo' + {foo:'bar'} //returns "foo[object Object]"
1 + {foo:'bar'} //returns "1[object Object]"
{foo:'bar'} + 1 //returns 1
{foo:'bar'} + 'foo' //returns NaN
Run Code Online (Sandbox Code Playgroud)

除非我将对象分配给变量,否则会发生这种情况.如果我用X = {foo:'bar'},

X + 'foo' //returns "[object Object]foo"
Run Code Online (Sandbox Code Playgroud)

然后对象又变成了一个字符串.

我可以理解为什么这种类型的转换可能会在==运算符中发生,但为什么要添加呢?为什么添加更改数组和对象(是的,我知道数组也是对象)到其他东西?

javascript

-1
推荐指数
1
解决办法
82
查看次数

标签 统计

javascript ×8

obfuscation ×2

ecmascript-5 ×1

forms ×1

jquery ×1

syntax ×1

types ×1