《JavaScript高级程序设计》笔记——chapter3 操作符

JavaScript操作符详解
本文深入讲解了JavaScript中的各类操作符,包括一元操作符、位操作符、布尔操作符等,并通过实例说明了它们的应用场景。
3.5 操作符

3.5.1 一元操作符  ——只能操作一个值

1、递增和递减

  • 前置型——先+ - 再求值
    • 前增(++a)
    • 前减(--a)

var a = 29;
var b = --a + 2;
alert(a);  //输出28
alert(b);  //输出30

  • 后置型——先求值再 + -
    • 后增(a++)
    • 后减(a--)

var a = 2;
var b = 21;
var c = a++ + b;  //23
var d = a + b;    //24


2、一元加和减操作符
——主要用于基本的算术运算,也可以用于转换数据类型
一元操作符放在数值前面,不会对数值造成任何影响。
不过,在对非数值应用一元操作符时,该操作符会像Number(  )  转型函数一样对这个值进行转换。

var s1 = "01";
var s2 = "1.1";
var s3 = "z";
var b = false;
var f = 1.1;
var o = {
    valueOf: function() {
         return -1;  
    }
};

s1 = +s1;  //1
s1 = +s1;  //1.1
s1 = +s1;  //NaN
b = +b;    //0
f = +f;    //1.1
o = +o;    //-1
 //操作符为 -  时,只是将得到的数值在转换为负数而已。



3.5.2  位操作符(对目前来,太底层,有时间再理解 )
——用于在最基本的层次上,即按内存中表示数值的位来操作数值。

  • 按位非(NOT)
  • 按位与(AND)
  • 按位或(OR)
  • 按位异或(XOR)
  • 左移
  • 有符号的右移
  • 无符号右移



3.5.3  布尔操作符
——非(NOT)  与(AND)  或(OR)

1、逻辑非(!)

可以应用于ECMAScript 中的任何值。无论这个值是什么数据类型,这个操作符都会返回一个布尔值。逻辑非操作符首先会将它的操作数转换为一个布尔值,然后再对其求反。
逻辑非操作符遵循下列规则:
alert(!false);    //true
alert(!"blue");   //false
alert(!0);        //true
alert(!NaN);      //true
alert(!"");       //true
alert(!123);      //false 

同时使用两个逻辑非操作符 !!,可以模拟Boolean(  ) 转型函数的行为。


2、逻辑与(&&)
——可以用于任何类型的操作数,不仅仅是布尔值。

逻辑与的真值表如下:
规则:
q 如果第一个操作数是对象,则返回第二个操作数;
q 如果第二个操作数是对象,则只有在第一个操作数的求值结果为true 的情况下才会返回该对象;
q 如果两个操作数都是对象,则返回第二个操作数;
q 如果有一个操作数是null,则返回null
q 如果有一个操作数是NaN,则返回NaN
q 如果有一个操作数是undefined,则返回undefined

alert(1 && 2 && 3);  //返回数值3
alert("a" && "b");   //返回"b"
//这一特点可以好好利用,用来做赋值。

&& 和 ||  属于短路操作,即如果第一个能够决定结果,就不再对第二个操作数求值。
对于&&,第一个操作数的求值结果是false的话,直接返回false
对于||, 第一个操作数的求值结果是true的话,直接返回true


3、逻辑与(||)

逻辑或的真值表如下:
规则:
q 如果第一个操作数是对象,则返回第一个操作数;
q 如果第一个操作数的求值结果为false,则返回第二个操作数;
q 如果两个操作数都是对象,则返回第一个操作数;
q 如果两个操作数都是null,则返回null
q 如果两个操作数都是NaN,则返回NaN
q 如果两个操作数都是undefined,则返回undefined

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


3.5.4  乘性操作符 (相应规则,暂且不表)
  • 乘法(*)
  • 除法(/)
  • 求模(%)


3.5.5  加性操作符 (相应规则,暂且不表)
  • 加法(+)(注意加法操作符的字符串拼接作用
var num1 = 5;
var num1 = 10;

var message = "The sum of 5 and 10 is " + num1 + num2;
alert(message);    //"The sum of 5 and 10 is 510"  
//每个 + 是独立的,按顺序执行的

var message ="The sum of 5 and 10 is " + (num1 + num2);
alert(message);    //"The sum of 5 and 10 is 15"

  • 减法(-)


3.5.6  关系操作符(相应规则,暂且不表)
  • 小于(<)
  • 大于(>)
  • 小于等于(<=)
  • 大于等于(>=)


3.5.7  相等操作符 (相应规则,暂且不表)
  • 相等(==) 和 不相等(!=)        先转换再比较
特殊情况:
  • 全等(===) 和 不全等(!==)   仅比较不转换
alert("55" != 55);    //false  先转换再比较
alert("55" !== 55);   //true   不转换,数据类型不同



3.5.8  条件操作符

看例子吧:
variable = boolean_expression ? true_value : false_value;
本质上,这行代码的含义就是基于对boolean_expression 求值的结果,决定给变量variable赋什么值。如果求值结果为true,则给变量variable true_value 值;如果求值结果为false则给变量variable false_value 值。

再看一个例子:
var max = (num1 > num2) ? num1 : num2;
在这个例子中,max 中将会保存一个最大的值。这个表达式的意思是:如果num1 大于num2(关系表达式返回true),则将num1 的值赋给max;如果num1 小于或等于num2(关系表达式返回false),则将num2 的值赋给max


3.5.9 赋值操作符(=)

复合赋值操作:
  • 乘/赋值(*=)
  • 除/赋值(/=)
  • 模/赋值(%=)
  • 加/赋值(+=)
  • 减/赋值(-=)
  • 左移/赋值(<<=)
  • 有符号右移/赋值(>>=)
  • 无符号右移/赋值(>>>=)

举个例子:
var num = 10;
var num += 10;   //等同于
var num = num + 10;


3.5.10  逗号操作符

使用逗号操作符可以在一条语句中执行多个操作。
var num1=1, num2=2, num3=3;

此外,还可用于赋值。在用于赋值时,逗号操作符总会返回表达式的最后一项
var num = (2, 5, 7, 4, 3 );  // num的值是3




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值