在对非数值应用一元加操作符时,该操作符会像Number()转型函数一样对这个值执行转换。换句话说,布尔值false和true将被转换为0和1,字符串值会被按照一组特殊的规则进行解析,而对象先是调用它们的valueOf()方法(或)toString()方法,再转换得到的值。例如:
注意 减号同样适用 例如 s1 = -s1; 值变成-1
逻辑非
如果操作数是对象,返回false
如果操作数是空字符串,返回false
如果操作数是一个非空字符串,返回false
如果操作数是数值0,返回false
如果操作数是任意非0数值(包括Infinity),返回false
如果操作数是null,返回true
如果操作数是NaN,返回true
如果操作数是undefined,返回true
逻辑与
逻辑与操作可以应用于任何类型的操作数,而不仅仅是布尔值。再有一个操作数不是布尔值的情况下,逻辑与操作就不一定返回布尔值;此时它遵循下列规则:
如果第一个操作数是对象,则返回第二个操作数。
如果第二个操作数是对象,则只有在第一个操作数的求值结果为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,例如
with语句
with语句的作用是将代码的作用域设置到一个特定的对象中。例如
上面的代码都包含location对象。如果使用with语句,可以改写为:
ECMAScript中的所有参数传递都是值传递,不可能通过引用传递参数。
可以向ECMAScript函数传递任意数量的参数,并且可以通过arguments对象来访问这些参数。
由于不存在函数签名的特性,ECMAScript函数不存在重载。
var s1 = "01"; s1 = +s1; //值变成数值1
var s2 = "1.1"; s2 = +s2; //值变成数值1.1
var s3 = "z"; s3 = +s3; //值变成NaN
var b = false; b = +b; //值变成数值0
var f = 1.1; f = +b; //值未变,仍是1.1
var o = { o = + o; //值变成数值-1
valueOf : 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); //true
var 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函数不存在重载。