js奇淫技巧1

 ps:  js另外一种高深写法,只不过不适合基础太差的想故意装逼的,因为你要是有意而为之,只能是披着羊皮的狼,玩死自己。要不叫做JsFuck。可以自行JsFuck。什么叫基础不差,我觉得至少js高级编程指南看三遍以上的。

js奇淫技巧1 - 眷恋天空的驴 - 眷恋天空的驴!
以下这个是符号运算的黄金法则,基本上就是转化
var a = ![] === false;     //  !后面的字符会被转为换布尔
var b = +[] === 0; // +后面的字符会被转换为数值
var c = []+[]=== ""; // [] 后面跟的字符会被转换为字符串
var d = "hello"[0] == "h"; // 检索字符串
var e = +("1"+"1") === 11; // 多个数字通过添加字符串表示在一起,然后整个表达式转换为数值类型

var f = +!![] === 1;
var g = ![]+[] === "false";
var h = ![] === false;
var i = (![]+[])[+!![]] === "a"; // 等价于 "false"[1]
// 举一反三

我们可以通过true 和 false得到相似的字母a,e,f,l,r,s,t,u,那么我们可以从其他地方得到的字母吗?

我们可以通过一些特别的式子如[][[]]得到undefined,利用我们上面讲到的黄金法则得到另外的字母d,i 和 n

`[][[]] + [] === "undefined"`
到目前为止,利用我们已经获得的所有字母,我们可以拼 fill filter  和  find 。当然也有一些其他的单词,我们也可以拼写,但这些单词最重要的是,他们都是 数组的方法 。这意味着他们是数组对象的一部分,可以直接调用数组实例

了解JavaScript的另一件重要的特性是一个对象的属性可以通过点符号.或方括号[]访问。上述数组方法是数组对象本身的属性,我们可以使用方括号代替点符号调用这些方法。

所以[2,1]["sort"]() 等效于 [2,1].sort().

[]["fill"]+[] === "function fill() { [native code] }"

所以现在我们又得到其他的字符:c,o,v,(,),{,[,],}

随着我们新得到的co,我们现在可以形成constructor这个单词。构造函数是一个方法,所有JS对象仅返回自己的构造函数。

到目前为止我们已经处理的对象,我们可以得到它用字符串表示的构造器函数:

var j = [][[]] + [] === "undefined";
var k = []["fill"]+[] === "function fill() { }";

true["constructor"] + [] === "function Boolean() { [native code] }";
0["constructor"] + [] === "function Number() { [native code] }" ;
""["constructor"] + [] === "function String() { [native code] }";
[]["constructor"] + [] === "function Array() { [native code] }";
({})["constructor"] + [] === "function Object() { [native code] }";



现在我们可以构造一个我们可以使用方括号的函数"toString"`,我们可以这样调用:

(10)["toString"]() === "10"

使用我们的黄金法则,我们已经可以将任何我们想要转换成一个字符串,但是上面这个式子怎么用呢?

好吧,我告诉你,Number类型的toString方法有一个称为radix(“基数”)的秘密的论点。它可以将数值在转换为一个字符串之前先经过基数换算,像这样:

(12)["toString"](10) === "12"  // 十进制
(12)["toString"](2) === "1100" // 二进制
(12)["toString"](8) === "14"   // 八进制
(12)["toString"](16) === "c"   // 十六进制

但是为什么基数只写到16?最大值是36,包括所有的字符0-9 和 a-z,所以现在我们可以得到任何我们想要的字母数字:

(10)["toString"](36) === "a"
(35)["toString"](36) === "z"

太棒了!但是其它符号如标点符号和大写字母呢?我们接着深入探索。

这取决于你的JS执行时,它可能会或可能不会访问特定的预定义的对象或数据。如果你在浏览器中运行它,那么你可以访问一些存在的HTML包装器方法

例如,bold是一个包装在<>标签中的字符串方法。

"test"["bold"]() === "<b>test</b>"

通过这个我们得到<>/两个字符。

资源:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值