
 var a=false; 
!a&&alert("hi"); 
解释 a为真才继续往下执行,所以会弹出hi 
var a=a||"hi"; 
解释 当a为假的时候会继续执行,当a为真的时候跳出这个语句,所以可以通过这个办法复制默认值 
上面的方法并非所有语言都是如此处理,比如PHP 
$a=@$a||"hi"; 
echo $a;//1 
php把(@$a||"hi")之后的值赋值过去了... 
$a=true; 
!$a&&echo "hi"; 
直接报错:syntax error, unexpected T_ECHO 
关于prototype 
很多情况下看到prototype都想到只有对象的情况下有 
var add=function(){alert("b");} 
add.prototype.a = function () {alert("hi");} 
new add.prototype.a; 
第一反应,可能会报错,其实不然,当没有生产对象的时候,可以通过add.prototype.a的方式直接调用静态的方法的 
JS挺会误导人的,咳 
选择器问题: 
有时候需要选择一个节点下的子节点,用childNodes取值FIREFOX,IE的不同让人很郁闷 
document.getElementsByTagName("head")[0].getElementsByTagName("script")[0]; 
上面的方法结果用在head标签阶段还好,用在其他的不怎么好用了 
所有觉得还是用个类名作处理好点 
 代码如下: 
function getclassnode(classname,doc){ 
doc=doc||document; 
var node=[],i=0,j=0,t; 
var allnode=doc.getElementsByTagName("*"); 
while(t=allnode[i]){ 
if(RegExp(classname).test(t.className)){ 
node[j]=t; 
j++; 
} 
i++; 
} 
return node; 
}  
自从用了JQ后,把原生的JS操作都忘的差不多了,偶尔复习下,感觉特麻烦,郁闷. 
补上一点今天发现的JS要注意的地方,如果一个JS已经引入到了当前文档,即使移除引入节点,通过该引入JS文件定义的变量,函数等仍然有效,因为已经加载到了当前的文档环境,如下代码: 
 代码如下: 
document.getElementsByTagName("head")[0].removeChild(document.getElementsByTagName("head")[0].getElementsByTagName("script")[0]);