骚操作系列
for in 赋值
var a = {
a:1,
b:2,
c:3,
}
var lis = [], i = 0;
***骚操作开始***
for (lis[i++] in a);
***骚操作结束***
console.log(lis);
lis变成了 ['a','b','c']
lis[i++]做了一个赋值操作
直接eval与间接eval
var f = eval;
var loc = 'i am loc';
function test(){
var loc = 'i am loc in test';
f("loc += ' no no no no'");
console.log(loc);
}
console.log(loc)
结果输出是
i am loc in test
i am loc no no no no
间接eval不能操作上下文变量只能操作到全局的。
else if(其实不是elseif)
只是看上去像elseif其实js本身没有
var choice = 2;
if (choice==1){
console.log(1)
}else if(choice == 2){
console.log(2)
}else if(choice == 3){
console.log(3)
}
其实是
if(){
巴拉巴拉
}else{
if
(){
巴拉巴拉
}else{
if(){}
}
}
花里胡哨的直接Switch不就完了吗
continue break标签跳转
实用的骚操作
如果有一个多层的循环
然后满足一个特殊条件后
要直接终止循环
比如
for(){
for(){
if(特殊条件){
break;
}
}
}
但是这么写的话只能中断一层
js里break,continue是可以加标签我们可以这么写
mainloop: for(){
for(){
if(特殊条件){
break mainloop;
}
}
}
这样会直接终止最外层的循环
不然你中断一层外面再做判断再中断,麻烦。(continue也可以这么玩)
使用!==判断对象内是否有属性
想判断对象x中是否含有属性y
var x = {y:1}
x.y !== undefined
输出是true说明有y这个属性。
有 in(啥都可以判断)
有hasOwnProperty(前提不是继承来的)
有propertyIsEnumerable(前提是可枚举的)
非要这么骚
当然这个方法也不是全适用。如下。
var x = {y:undefined}
x.y !==undefined
输出是false,确实是false因为x.y == undefined但是不能说是没有y这个属性。
到底是谁想的这么骚的方法.