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

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




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值