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]);