JavaScript语言基础(二) 运算符
?
运算符总览
括号
(x)?[x]
中括号只用于指明数组的下标
求反,自加减
-x
返回?x?的相反数
!x
返回与?x?(布尔值)相反的布尔值
x++
x?值加?1,但仍返回原来的?x?值
x--
x?值减?1,但仍返回原来的?x?值
++x
x?值加?1,返回后来的?x?值
--x
x?值减?1,返回后来的?x?值
乘、除
x*y
返回?x?乘以?y?的值
x/y
返回?x?除以?y?的值
x%y
返回?x?与?y?的模(x?除以y?的余数)
加、减
x+y
返回?x?加?y?的值
x-y
返回?x?减?y?的值
关系运算
x<y?x<=y
x>=y?x>y
当符合条件时返回?true?值,否则返回?false?值
等于、
不等于
x==y
当?x?等于?y?时返回?true?值,否则返回?false?值
x!=y
当?x?不等于?y?时返回?true?值,否则返回?false?值
恒等
X===y
X与y数据类型相等且值相等返回true,否则返回false
?
位与
x&y
当两个数位同时为?1?时,返回的数据的当前数位为?1,其他情况都为?0
位异或
x^y
两个数位中有且只有一个为?0?时,返回?0,否则返回?1
位或
x|y
两个数位中只要有一个为?1,则返回?1;当两个数位都为零时才返回零
?
逻辑与
x&&y
当?x?和?y?同时为?true?时返回?true,否则返回?false
逻辑或
x||y
当?x?和?y?任意一个为?true?时返回?true,当两者同时为?false?时返回?false
?
条件
c?x:y
当条件?c?为?true?时返回?x?的值(执行?x?语句),否则返回?y?的值(执行?y?语句)
赋值、
复合运算
x=y
把?y?的值赋给?x,返回所赋的值
x+=y?x-=y?x*=y
x/=y?x%=y
x?与?y?相加/减/乘/除/求余,所得结果赋给?x,并返回?x?赋值后
?
其中有三个需要注意:
一、==(相等)?与?===(恒等)的区别
简单的说,相等判断会进行数据类型转换;而===不转换,必须是数据类型一致且值相等;
转换过程与一般语言的顺序一致;基本都是boolean->int->double->string
例如:
?
<html><head><title>test</title><script type="text/javascript">function test() {alert(1 == "1");//显示 truealert(1 == true);//显示 truealert(0 == false);//显示 truealert("1" === "1");//显示 truealert(1 === "1");//显示 falsealert(1 === true);//显示 false}</script></head><body onload="test()"></body></html>?
?
?
二、另一条可是这样理解,有布尔表达式运算的时候,如果变量不是布尔类型,会用变量的值构造Boolean类型,然后进行运算。
Boolean类型构造原则:值为?0、-0、null、""、false、undefined?或?NaN,则将其变为?false。否则设置为?true(即使参数是字符串?"false")。
例如:
?
?
<html><head><title>test</title><script type="text/javascript">function test() {alert(!undefined);//truealert(!'');//truealert(!1);//falsealert(!0);//truealert(true == 1);//truealert(false == "false");//falseif (undefined) {alert(1);} else {alert(2);//alert结果为2}}</script></head><body onload="test()"></body></html>?
?
?
三、或运算符还可以这么用(在Jquery和Extjs源码中常见到),用来给undefined的变量赋一个默认值。目前还没有找到关于此用法的官方语法解释。例如:
?
<html><head><title>test</title><script type="text/javascript">function test() {var param;//这里其实是undefinedparam = param||'hello world!';alert(param);//显示"hello world!"if (undefined||'') {alert(1);} else {alert(2);//显示的是2}/** * 本人分析: * 首先'或'运算符将param转为boolean,因为是undefined,因此转为false * 第一个值为false后,或运算符就判断第二个表达式的值,又将string转为true,如果是0/'' 等就返回false; * 不管第二个被转换为true还是false,总之都要返回第二个表达式的值;并且返回的是原数据类型 * 以此来达到默认值的效果 */}</script></head><body onload="test()"></body></html>?
?
?