JS奇淫技巧:数值的七种写法
JS奇淫技巧:挑战前端黑科技,数值的七种写法,能全看懂的一定是高手
你知道吗?在JS编程中,数值可以有很多种写法。
第一种写法:一般情况而言,数值就是数值。
比如:
var a = 1;
你可知,这个1可以有很多种变形的写法,甚至是变态的写法。
第二种写法:var a= !!{};
console.log(a);
即:1变成了 !!{}。
数值1为什么能用 !!{}来表示呢?原因如下:
在JS语法中,!{}是布尔值false,强制转换成数字为0,!!{}则是true,用 号做强制转换,变成数值即为1。
以此类推:
2=( !!{}) (!!{})
3=( !!{}) (!!{}) (!!{})
111= (( !!{}) [] ( !!{}) ( !!{}))
第三种写法:var a=266119^266118;
console.log(a);
即:将异常运算的结果,等于我们使用的数值。
这也就意味着,同一个数,比如1,可以有多种异或写法,比如:
第四种写法:var a=596219^596218;
var a=115812^115813;
var a = function (s, h) {
return s ^ h;
}(719028, 719029);
console.log(a);
也就是把第三种写法中的异或运算变成函数,将异或的两个数以参数的形式传入,在函数中运算并返回数值结果。
第五种写法:把第三种写法中的亦或运算转成ast(抽象语法树)。
var a = ast({"type":"File","program":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"BinaryExpression","left":{"type":"NumericLiteral","value":115812},"operator":"^","right":{"type":"NumericLiteral","value":115813}}}]}});
console.log(a);