js代码如下
function xxx()
{
var celltype = gettype(col, row); if ((celltype == "自动编号" || celltype == "链接" || celltype == "附件" || celltype == "单选框" || celltype == "下拉框" || celltype == "检查框") && CellControl.cell.style.display == "none")
return;
.....如果是c语言,我会将与两边的条件表达式反过来写:
if (CellControl.cell.style.display == "none" && ((celltype == "自动编号" || celltype == "链接" || celltype == "附件" || celltype == "单选框" || celltype == "下拉框" || celltype == "检查框"))因为c的if判断是从左到右来做的,如果中间是“与”左测的失败,右侧的根本不会被执行。不知js中是不是也是这样?另外如果这样写,js引擎执行时是否会做优化?即:将gettype(col, row)求出来的值缓存起来,只执行1次而不是3次
if(gettype(col, row)== "自动编号")
{...}
else if (gettype(col, row)== "链接")
{...}
else if (gettype(col, row)== "附件")
{...}对js引擎不太熟悉,不知道有哪本书专门介绍js语言执行细节的,故在此发帖提问,请大家指点,先谢过
function xxx()
{
var celltype = gettype(col, row); if ((celltype == "自动编号" || celltype == "链接" || celltype == "附件" || celltype == "单选框" || celltype == "下拉框" || celltype == "检查框") && CellControl.cell.style.display == "none")
return;
.....如果是c语言,我会将与两边的条件表达式反过来写:
if (CellControl.cell.style.display == "none" && ((celltype == "自动编号" || celltype == "链接" || celltype == "附件" || celltype == "单选框" || celltype == "下拉框" || celltype == "检查框"))因为c的if判断是从左到右来做的,如果中间是“与”左测的失败,右侧的根本不会被执行。不知js中是不是也是这样?另外如果这样写,js引擎执行时是否会做优化?即:将gettype(col, row)求出来的值缓存起来,只执行1次而不是3次
if(gettype(col, row)== "自动编号")
{...}
else if (gettype(col, row)== "链接")
{...}
else if (gettype(col, row)== "附件")
{...}对js引擎不太熟悉,不知道有哪本书专门介绍js语言执行细节的,故在此发帖提问,请大家指点,先谢过
声明一个变量存储函数的返回值是正确的,这样可以避免每次判断的时候都会重复执行gettype(col, row);if (CellControl.cell.style.display == "none" && ((celltype == "自动编号" || celltype == "链接" || celltype == "附件" || celltype == "单选框" || celltype == "下拉框" || celltype == "检查框"))JS里面的判断也是从左到右,所以这样写更好。
(celltype == "自动编号" || celltype == "链接" || celltype == "附件" || celltype == "单选框" || celltype == "下拉框" || celltype == "检查框")
所以 接下来就是几个 == 的运算条件式变成:"block" == "none" && (true || false || false || false || false || false)然后就是 || 的运算条件式变成:"block" == "none" && (true)所以运算完括号后条件式变成:"block" == "none" && true这时候就是运算 == 了,优先级高条件式变成:false && true最后运算 && 条件式变成:false
所以写左写右没有区别,运算法则在那里摆着如果有同志有不同意见的,欢迎拍砖“千万不要想当然” 这句话与大家共勉之!
var i=0;
function logic(){
i+=1;
return true;
}
if(true || logic())alert(i);
i=0
if(false || logic())alert(i);
</script>code]
应该也是从左到右运算吧
var i=0;
function logic(){
i+=1;
return true;
}
if(true || logic())alert(i);
i=0
if(false || logic())alert(i);
i=0
if(true && logic()){;}alert(i)
i=0
if(false && logic()){;}alert(i)
</script>
function f1(){
alert("f1");
return false;
}function f2(){
alert("f2");
return false;
}function f3(){
alert("f3");
return true;
}function f4(){
alert("f4");
return false;
}function main(){
//if (f1() && (f2()|| f3() || f4())) // f1 false
if ( (f2()|| f3() || f4()) &&f1() ) // f2,f3,f1,false
alert(true);
else
alert(false);
}
....
}我也想当然一下:
1. dom访问没有内存变量访问快,所以style放后边
2. 创建多个字符串常量不如创建一个快
3. 变成一个字符串有利于精简代码可能的问题:
1. indexOf 未必有多个==快
2. 字符串加法也慢