javascript高级程序设计笔记--js操作符

来源:互联网 发布:手机开淘宝店实名认证 编辑:程序博客网 时间:2024/06/05 00:49
在对非数值应用一元加操作符时,该操作符会像Number()转型函数一样对这个值执行转换。换句话说,布尔值false和true将被转换为0和1,字符串值会被按照一组特殊的规则进行解析,而对象先是调用它们的valueOf()方法(或)toString()方法,再转换得到的值。例如:
var s1 = "01";                       s1 = +s1;  //值变成数值1var s2 = "1.1";                      s2 = +s2;  //值变成数值1.1var s3 = "z";                         s3 = +s3;  //值变成NaNvar b = false;                        b = +b;     //值变成数值0var f = 1.1;                           f = +b;      //值未变,仍是1.1var o = {                               o = + o;    //值变成数值-1valueOf : function(){return -1;}}


注意 减号同样适用 例如 s1 = -s1;  值变成-1

逻辑非
如果操作数是对象,返回false
如果操作数是空字符串,返回false
如果操作数是一个非空字符串,返回false
如果操作数是数值0,返回false
如果操作数是任意非0数值(包括Infinity),返回false
如果操作数是null,返回true
如果操作数是NaN,返回true
如果操作数是undefined,返回true
!false    //true!"blue"  //false!0         //true!NaN     //true!""         //true!12345  //false



逻辑与
逻辑与操作可以应用于任何类型的操作数,而不仅仅是布尔值。再有一个操作数不是布尔值的情况下,逻辑与操作就不一定返回布尔值;此时它遵循下列规则:
如果第一个操作数是对象,则返回第二个操作数。
如果第二个操作数是对象,则只有在第一个操作数的求值结果为true的情况下才会返回该对象。
如果两个操作数都是对象,则返回第二个操作数。
如果有一个操作数是null,则返回null。
如果有一个操作数是NaN,则返回NaN。
如果有一个操作数是undefined,则返回undefined。

逻辑或
如果第一个操作数是对象,则返回第一个操作数。
如果第一个操作数的求值结果为false,则返回第二个操作数。
如果两个操作数都是对象,则返回第一个操作数。
如果两个操作数是null,则返回null。
如果两个操作数是NaN,则返回NaN。
如果两个操作数是undefined,则返回undefined。

可以利用逻辑或的这一行为来避免为变量赋null或undefined值,例如:
var myObject = preferredObject || backupObject;
在这个例子中,变量myObject奖杯赋予等号后面两个值中的一个。变量preferredObject中包含优先赋给变量myObject的值,变量backupObject负责在preferredObject中不包含有效值的情况下提供后备值。如果preferredObject的值不是null,那么它的值将赋给myObject;如果是null,则将backupObject的值赋给myObject。

关系操作符
例如  var result = 5>2; //true
var result = "23" > "3";  //false  因为ASCII码中2为50,3为51

全等和不全等
===表示两个操作数未经转换就相等的情况下返回true,例如
var result1 = ("55" == 55);    //truevar result2 = ("55" === 55);  //false



with语句
with语句的作用是将代码的作用域设置到一个特定的对象中。例如
var qs = location.search.substring(1);var hostname = location.hostname;var url = location.href;


上面的代码都包含location对象。如果使用with语句,可以改写为:
with(location){var qs = search.substring(1);var hostname = hostname;var url = href;}



ECMAScript中的所有参数传递都是值传递,不可能通过引用传递参数。
可以向ECMAScript函数传递任意数量的参数,并且可以通过arguments对象来访问这些参数。
由于不存在函数签名的特性,ECMAScript函数不存在重载。
0 0
原创粉丝点击