javascript之运算符注意点

1、运算符内部实现原理

运算符大部分都是 通过 操作 对象的 valueOf()方法  和 toString()方法 实现的

2、一元运算符

1)例如:++、--;注意他们 内部 是会 隐式对 对象进行转型(调用的是Number()方法 进行转型)

var d='12';    d++;   //这里会 先 调用 Number()方法 对 d  进行转型 为数字 之后 做++运算。

alert(typeof  d);  //返回的 类型是 number(已经转型为  Number 类型了)

2)如果一元运算符操作的 Object类型的数据  ,则会 先调用 对象的 valueOf() ,之后调用toString()方法,如果返回值不是数字 再 调用Number()方法进行隐式的转型

1 var d3={
2     valueOf:function(){
3           return 123;
4         }
5     };
6 alert(++d3);//124
7 
8 var d4={};//空对象,返回的就是 NaN
9 alert(++d4);//NaN

 3、算数运算符

 1)+ 操作的注意点:

如果 + 的两边  含有 字符串,就会优先执行,字符串的  拼接,而不是 执行 数字字符串的 隐式转型,然后数字的加减

1 var d=100+'100';
2 alert(d);//100100(这里的 + 是 字符串连接符:当 +  中 含有 字符串的时候 就会被识别为 字符串连接符 )

 4、关系运算符

 (< 、 > 、==、===等  )

1》关系运算符 (<  、 >)遵循的几条规则

 1)如果只含有一个数字字符串,那么会 将其转型为  Number 类型的 进行 比较大小

 2)如果两个都是 数值字符串,那么会  比较 字符串的 第一个 字符的  数字的大小

 3)如果 运算符  用在 Object对象上面,那么会调用 valueOf() 和 toString()之后 再进行比较

 4)如果比较的是 纯字符串(不是数值字符串),那么比较的是他们的ASCII码。

 1 var box='3' > 22;   //如果只含有一个 数值字符串,那么 就会将字符串转换成数值 之后进行比较
 2 alert(box);//false
 3 
 4 var box2='3' > '22';  //如果两个都是数值字符串,  那么 比较的就是 他们 的第一个字符的数值大小
 5 alert(box2); //true(3 > 2)
 6 
 7 var box3= 12 > {
 8       valueOf:function(){
 9              return 11;
10           }
11     };
12 alert(box3);

 

 2》== 用于引用对象的比较,比较的是  对象的地址

   还有上次的 提到的。undefined == null  //返回true(他们的值是相同的,但是他们的 数据类型是不相同,用 === 比较就是 false)

1 var  box4= {} =={};  // false:因为 对象的比较 比较的是 地址
2 
3 var box5=null == undefined;//true  值 是相等的
4 var box6 = null === undefined;//false  数据类型 是不等的

5、逻辑运算符 

 1)&&  和 || 都是 短路操作:&& 前面的 返回false,那么后面就不进行验证了,直接返回false;;同样如果||前面的 返回 true,那么直接返回true,后面也不再进行验证了。

2)|| 的第二个用法:防止 对变量 赋值 null

1 var age1=12;
2 var age2;
3 
4 var age=age1 || age2;//如果age1有值 age2无值,就将有值的赋给 age,如果都有值,那么就 将 || 前面的 赋给age
5 alert(age);

 

如果 || 两边 一个有值  一个为null  那么就会将 有值的 那个值  赋值 给 age,如果都有值,就会 把 || 前面的 赋值给 age

 

posted @ 2013-12-19 22:55  小小gogo  Views(194)  Comments(0Edit  收藏  举报