你见过这个代码吗:a=a | |可能javascript初学者会不知所措。今天,我将和大家分享我的一些经历。实际上:
a=a | |“DefaultValue”;a=a | |“DefaultValue”;以及:
if(!a){ a=' DefaultValue ';}if(!a){ a=' DefaultValue ';}和:
if(a==null | | a==' ' | | a==未定义){ a=' defaultValue} if(a==null | | a==' ' | | a==未定义){ a=' defaultValue}是等价的!要理解这个问题,我们必须首先理解一个问题:当javascript中的数据类型转换为bool类型时会发生什么。在javascript中,数据类型可以分为“真值”和“假值”。顾名思义,当真值转换为bool时,值为真;False值被转换为bool,该值为false。下表列出了一些常见数据类型转换为bool时的值:。
在if表达式中,javascript首先将条件表达式转换为bool类型,如果表达式为真,则执行if中的逻辑,否则跳过。所以有:
if(!a){ a=' DefaultValue ';}if(!a){ a=' DefaultValue ';}让我们看一下表达式“”和“| |”。因为javascript是弱类型语言,所以javascript中的这两个表达式可能与其他语言(如java)中的表达式不同。在javascript中,“”运算符的算法如下:如果左表达式的值为true,则返回右表达式的值;否则,返回左表达式的值。也就是说:
Var i=' ' '真值';//-i=''i='真理''其他真理';//-i=“其他真值”i=“真值”;//-i=''var i=' ' '真值';//-i='' i='真理''其他真理';//-i=“其他真值”i=“真值”;//-I=' "“| |”运算符的算法如下:|左侧表达式的值为真,则返回左侧表达式的值;否则,返回正确表达式的值。也就是说:
Var i=''|| '真值';//-i='真理' i='真理' | | '其他真理';//-i='真值' i='真值' | | ';//-i='真值' var i=''|| '真值';//-i='真理' i='真理' | | '其他真理';//-i='真值' i='真值' | | ';//-i='真值'所以,你可以理解:
a=a | |“DefaultValue”;a=a | |“DefaultValue”;逻辑。如果是假值(等于空字符串.),将“defaultValue”赋给;否则,将的值赋给自身。让我们使用| |,来简化程序:
var参数=' ';函数测试(参数){//返回真值返回真;}//真理运算函数operate1(参数){返回‘真理运算’;}//false值操作函数operate2(参数){返回' false值操作';}var结果=test(参数)operate1(参数);结果=测试(参数)| |操作2(参数);//相当于result=test(参数)?operator 1(参数): operator 2(参数);警报(结果);//true operation//也相当于if (test(参数)){result=operate1(参数);}else{result=operate2(参数);} alert(result)//true运算。
另一个例子:
脚本语言=' JavaScript ' type=' text/JavaScript ' var a=1;var b=0;var c=3;var d=a b c;window . alert(d);/script输出d的值为0。如果d的值被更改为不等于0的值,d将始终为3。
因此,js中返回的是第一个不为真的值,即0(对象也可以为0)。如果都为真,则返回最后一个值。
脚本语言=' JavaScript ' type=' text/JavaScript ' var a=0;var b=3;var c=5;var d=a | | b | | c;window . alert(d);/script输出d的值为3。如果b的值变为0,那么d将始终为5。如果它们都变成0,那么d的值就是0。/pp So | |在js中返回第一个不为假的值,即0(对象是OK的),如果都为假,则返回最后一个值。应用:
例如,为了简单地验证邮箱格式,仅当“@”和“.”时,格式才是正确的两者同时存在;否则,将提示错误:
我应该用哪一个?我们来分析一下:
If (form1。元素[3]。value。indexof ('@ ',0)==-1 form1。元素[3]。value。indexof(' . ',0)=-1){ alert('电子邮件地址输入不正确!')}如果两者都存在:两边都是假的。第一个值为真,所以如果判断条件为假。if之后的语句将不被执行!不会提示用户。
至少@和。有时if的条件为真,提示用户出错。
当两者都存在时,返回最后一个的值,这是if判断条件,if语句被执行。提示用户出现错误。
所以用明显的错误!
替换为
If (form1.elements [3]。value.indexof ('@ ',0)=-1 | | form 1 . elements[3]。value.indexof(' . ',0)=-1){ alert('电子邮件地址输入不正确!'。)}分析:
如果两者都存在:all为false,则返回false,所以If条件无效,不执行语句,也不提示错误!
如果只有一个:返回第一个不为假的值。返回true以提示错误!
两者都不存在:返回第一个不为假的值,返回true提示错误!
所以你应该用| |