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