核心提示:一元操作符只能操作一个值的操作符叫做一元操作符。递增和递减操作符前置型var age = 29;++age;alert(age); //30var age2 = 29;--age2;alert...
一元操作符
只能操作一个值的操作符叫做一元操作符。
递增和递减操作符
前置型
var age = 29; ++age; alert(age); //30 var age2 = 29; --age2; alert(age2); //28 var num1 = 2; var num2 = 20; var num3 = --num1 + num2; //21 var num4 = num1 + num2; //21后置型
var age = 29; age++; alert(age); //30 var num1 = 2; var num2 = 20; var num3 = num1-- + num2; //22 var num4 = num1 + num2; //21一元加和减操作符
var num = 25; num = +num; //仍然是25 //一元操作符主要用于表示负数,例如将1转换成 -1 var num = 25; num = -num; //-25布尔操作符
布尔操作符一共有3个:非(NOT)、与(AND)和或(OR)
逻辑非
逻辑非操作符由一个感叹号(!)表示,可用于ECMAScript中的任何值。无论这个值是什么数据类型,这个操作符都会返回一个布尔值。
逻辑非操作符首先会将它的操作数转换为一个布尔值,然后再对其求反。
逻辑非操作符转换规则和 Boolean()转换规则恰好相反
alert(!false); //true alert(!"blue"); //false alert(!0); //true alert(!NaN); //true alert(!""); //true alert(!123456); //false
//同时使用两个逻辑非操作符,实际上就会模拟 Boolean()转型函数。 alert(!!"blue"); //true alert(!!0); //false alert(!!NaN); //false alert(!!""); //false alert(!!12345); //true逻辑与
逻辑与操作符由两个和号(&&)表示,有两个操作数
var result = true && false //false只有两个操作数都为true的时候才会返回true
逻辑与操作可以应用于任何类型的操作数,不仅仅是布尔值。在有一个操作数不是布尔值的情况下,逻辑与操作数就不一定返回布尔值;此时应遵循以下规则:
1.如果第一个操作数是对象,则返回第二个操作数
2.如果第二个操作数是对象,则只有在第一个操作数的求值结果是true的情况下才会返回该对象
3.如果两个操作数都是对象,则返回第二个操作数
4.如果有一个操作数是null,则返回null
5.如果有一个操作数是NaN,则返回NaN
6.如果有一个操作数是undefined,则返回undefined
如果第一个操作数能够决定结果,那么就不会再对第二个操作数求值(例如第一个操作数是false,则结果一定是false)
逻辑或
逻辑或操作符由两个竖线符号(||)表示,有两个操作数
var result = true || false //true只有两个操作数都为false的时候才会返回false
与逻辑与类似,如果有一个操作数不是布尔值,逻辑或也不一定返回布尔值,遵循以下规则:
1.如果第一个操作数是对象,则返回第一个操作数
2.如果第一个操作数求值结果为false,则返回第二个操作数
3.如果两个操作数都是对象,则返回第一个操作数
4.如果两个操作数都是null,则返回null
5.如果两个操作数都是NaN,则返回NaN
6.如果两个操作数是undefined,则返回undefined
可以利用逻辑或的行为来避免为变量赋null或undefined值
var myObject = obj1 || obj2;变量myObject 将被赋予等号后面两个值中的一个。如果obj1的值不是null或undefined,那么它的值赋给myObject;如果是null,则将obj2赋给myObject
乘性操作符
ECMAScript定义了3个乘性操作符:乘法、除法和求模。
乘法
var result = 34 * 56;除法
var result = 66 / 11;求模(余数)
var reslut = 26 % 5; //1加性操作符
加法
var result = 1 + 2; //3 var result2 = 5 + "5"; //55减法
如果有一个操作数是对象、布尔值、null或undefined,则先在后台自动调用Number()函数将其转换为数值,然后在计算
var result = 2 - 1; //1 var result1 = 5 - true; //4,因为true被转换成了1 var result2 = NaN - 1; //NaN var result3 = 5 - ""; //5,因为"" 被转换成了0 var result4 = 5 - "2"; //3,因为"2" 被转换成了2 var result5 = 5 - null; //5,因为null 被转换成了0关系操作符
小于(<)、大于(>)、小于等于(<=)和大于等于(>=),返回一个布尔值
var result1 = 5 > 3; //true var result2 = 5 < 3; //false相等操作符
相等和不相等
相等(==)、不相等(!=) : 两个操作符都会先转换操作数(通常称为强制转换),然后再比较它们的相等性
比较相等性之前,不能将null和undefined转换成其他任何值
var result1 = ("55" == 55); //true,因为转换后相等 var result2 = ("55" === 55);//false,因为不同的数据类型不相等 var result3 = ("55" != 55); //false,因为转换后相等 var result4 = ("55" !== 55);//true,因为不同的数据类型不相等
全等和不全等
全等(===)、不全等(!==) : 在两个操作数未经转换就相等或不相等的情况下返回true
var result1 = ("55" == 55); //true,因为转换后相等 var result2 = ("55" === 55);//false,因为不同的数据类型不相等 var result3 = ("55" != 55); //false,因为转换后相等 var result4 = ("55" !== 55);//true,因为不同的数据类型不相等条件操作符
var max = (num1 > num2) ? num1 : num2;赋值操作符
由等与号(=)表示
var num = 10;逗号操作符
var num1 = 1, num2 = 2, num3 = 3; //同时声明多个变量 var num2 = {5, 1, 2, 4, 6}; //6(赋值:总会返回表达式的最后一项)do-while 语句
var i = 0; do{ i += 2; }while(i < 10) alert(i); //10while 语句
var i = 0; while(i < 10){ i += 2; }for 语句
var count = 10; for (var i = 0; i < count; i++){ alert(i); } for(;;){ //无限循环 doThing(); }for-in 语句
for (var proName in window){ document.write(proName); }label语句
使用label语句可以在代码中添加标签,以便将来使用。
语法: label:statement
start: for (var i=0; i < count; i++){ alert(i); }这里定义的start标签可以在将来有break或continue语句引用。加标签的语句一般都要与for语句等循环语句配合使用
break 和 continue
var num = 0 for (var i=1; i < 10; i++){ if (i % 5 == 0){ break; } num++; } alert(num); //4 var num2 = 0 for (var i=1; i < 10; i++){ if (i % 5 == 0){ continue; } num2++; } alert(num2); //8 //与label配合使用 var num3 = 0 outermost: for (var i=0; i < 10; i++){ for (var j=0; j < 10; j++){ if (i ==5 && j==5){ break outermost; } num3++; } } alert(num3); //55(break语句不仅会退出内部的for语句,而且也会退出外部的for语句)with 语句
with 语句的作用是将代码的作用域设置到一个特定的对象中。主要是简化多次编写同一个对象的工作
var qs = location.search.substring(1); var hostName = location.hostname; var url = location.href; 简化如下: with(location){ var qs = search.substring(1); var hostName = hostname; var url = href; }使用with语句关联了location对象。这意味着在with语句的代码块内部,每个对象首先被认为是一个局部变量,而如果在局部环境中找不到该
变量的定义,就会查询location对象中是否有同名的属性。如果发现有同名属性,则以location对象属性的值作为变量的值。
switch 语句
switch(i){ case 25: alert("25"); break; ase 35: alert("35"); break; default: alert("Other"); } //可以在switch语句中使用任何数据类型,无论是字符串,还是对象都没有问题。其次,每个case的值不一定是常量,可以是变量,甚至是表达式。 switch("hellow world"){ case "hellow"+" world": alert("Hello World!"); break; case "goodbye": alert("byebye"); break; default: alert("Other"); } //使用表达式 var num = 25; switch(true){ case num < 0: alert("Less than 0"); break; case num >=0 && num <= 10 alert("Between 0 and 10"); break; case num > 10 && num <= 20 alert("Between 10 and 20"); break; default: alert("More than 20"); }switch 语句在比较值时使用的是全等操作符,因此不会发生类型转换(例如,字符串"10"不等于数值10)
函数
function sayHi(name, message){ alert("Hello "+ name + "," + message); } //函数的参数并不是必要的,可通过 arguments 对象来访问参数数组,从而获取给函数的每一个参数 function sayHi(){ alert("Hello " + arguments[0] + "," + arguments[1]); } //使用 length 属性来确定传递进来多少个参数 function howManyArgs(){ alert(arguments.length); } howManyArgs("string", 45); //2 howManyArgs(); //0 howManyArgs(12); //1