一些比较杂碎的小知识,都是之前整理的,在这里纪录一下吧。

var f1=function f2(){}问题

先来看看下面的代码:

此时,从外面看,f1是有效的,但是f2是无效的,并且f1.name=='f2',因此单独的变量f2是不存在的。从内部看,f1,f2都是有效的,都代表这个方法。

一些特殊的RegExp

/null/.test(null)==true,test()方法里面的东西都会变成string,因此相当于/null/.test('null')。

/\w/.test()==true,注意此时test()方法里面没有东西,相当于/\w/.test('undefined')。

eval和new Function创建方法

var f=eval('(function(a,b){console.log(a,b);})');f(1,2);

var f=new Function(['a','b'],'console.log(a,b);');f(1,2);

[1]>[0]==true问题

如果[1]==[0]肯定为false,两个对象是不相等的,但是如果内容是数字或者自符的话,可以利用>或者<进行比较,比较就是从按照对应的位置的数字大小比较的,例如[1]>[0,1000]

3.toString()问题

如果想直接输出一个数字的字符串格式,直接写是不行的,正确的写法是3 .toString()或者3..toString()

连续比较符问题

1>2<1为true,计算步骤为(1>2)<1,而1>2为false,因此相当于false<1,为true

1<2==1为true,计算步骤为(1<2)==1,而1<2为true,因此相当于true==1,为true

constructor.constructor自执行代码

constructor.constructor('alert(1)')(),这个可以自己执行代码,相当于eval。

function(){}['constructor']自执行代码:

(function(){}['constructor']('console.log(1);')());

'a'+'b'?'c':'d'问题

上面的结果是'c',不是'ac',因为+的优先级大于?:

其他文章

0
我要评论

评论

返回
×

我要评论

回复:

昵称:(昵称不超过20个字)

图片:

提交
还可以输入500个字