矩阵具有无效字符

时间:2013-03-17 13:13:04

标签: javascript canvas

我刚看到this matrix on HN in less than 600 bytes

以下是完整的资料来源:

<body style=margin:0 onload="for(s=window.screen,w=q.width=s.width,
    h=q.height=s.height,m=Math.random,p=[],i=0;i<256;p[i++]=1);
    setInterval('9Style=\'rgba(0,0,0,.05)\'9Rect(0,0,w,h)9Style=\'#0F0\';
    p.map(function(v,i){9Text(String.fromCharCode(3e4+m()*33),i*10,v);
    p[i]=v>758+m()*1e4?0:v+10})'.split(9).join(';q.getContext(\'2d\').fill'),33)">
    <canvas id=q>

我的问题是变量的赋值如何以数字开头:setInterval('9Style=\'rgba(0,0,0,.05...)我认为js变量不能以数字开头。 这不应该是无效的lhs(左手边)分配吗?

2 个答案:

答案 0 :(得分:6)

你是对的,标识符不能以数字开头。如果您仔细观察,9将替换为;q.getContext('2d').fill

循环在设置变量时分解,并创建一个包含256 p s的数组1

s = window.screen,
w = q.width = s.width,
h = q.height = s.height,
m = Math.random,
p = [];
for (i = 0; i < 256; p[i++] = 1);

余数:

setInterval(
    '9Style=\'rgba(0,0,0,.05)\'9Rect(0,0,w,h)9Style=\'#0F0\';p.map(function(v,i){9Text(String.fromCharCode(3e4+m()*33),i*10,v);p[i]=v>758+m()*1e4?0:v+10})'
    .split(9).join(';q.getContext(\'2d\').fill')
, 33)

这变为:

setInterval(";q.getContext('2d').fillStyle='rgba(0,0,0,.05)';q.getContext('2d').fillRect(0,0,w,h);q.getContext('2d').fillStyle='#0F0';p.map(function(v,i){;q.getContext('2d').fillText(String.fromCharCode(3e4+m()*33),i*10,v);p[i]=v>758+m()*1e4?0:v+10})", 33);

将此代码放在http://jsbeautifier.org/中会给出:

;
q.getContext('2d').fillStyle = 'rgba(0,0,0,.05)';
q.getContext('2d').fillRect(0, 0, w, h);
q.getContext('2d').fillStyle = '#0F0';
p.map(function (v, i) {;
    q.getContext('2d').fillText(String.fromCharCode(3e4 + m() * 33), i * 10, v);
    p[i] = v > 758 + m() * 1e4 ? 0 : v + 10
})

答案 1 :(得分:1)

它不以数字开头。它只是一个字符串,是分开的:

'9Style ....'.split(9).join(...