JavaScript高级程序设计读书笔记(第三章)(二)

第三章:JavaScript基本概念

操作符

一元操作符:

递增和递减操作符(++ –)
注意:执行前置递增和递减操作时,变量的值都是在语句被求值以前改变的。
例如:

var age = 29;
var anotherAge = --age + 2;
alert(age); // 输出28
alert(anotherAge); // 输出30

注意:把递增操作符放在变量后面并不会改变语句的结果,因为递增是这条语句的唯一操作。但是,当语
句中还包含其他操作时,上述区别就会非常明显了。

var num1 = 2;
var num2 = 20;
var num3 = num1-- + num2; // 等于22
var num4 = num1 + num2; // 等于21

++ 和 –操作遵循以下规则:
字符串和布尔值:先转换为数字再进行操作,
对象:先调用对象的valueOf()方法,然后对该值进行运算。如果结果是NaN,则在调用toString()方法后再应用运算。对象变量变成数值变量。

var o = {
    valueOf: function() {
    return -1;
    }
};
o = +o; // 值变成数值-1
位操作符:

按位非、于、或、异或:
先将数值转化为二进制数,再进行位操作:
例如:25 | 3:

25 = 0000 0000 0000 0000 0000 0000 0001 1001
3 = 0000 0000 0000 0000 0000 0000 0000 0011
--------------------------------------------
OR = 0000 0000 0000 0000 0000 0000 0001 1011

结果为27。

左移操作符由两个小于号(<<)表示,这个操作符会将数值的所有位向左移动指定的位数

布尔操作符:

1、逻辑非:(!)

if(!false){
    //do something
}

2、逻辑与:
遵循规则:

  • 如果第一个操作数是对象,则返回第二个操作数:
var o = new Object()
    alert(o && true); ==>true
  • 如果第二个操作数是对象,则只有在第一个操作数的求值结果为true 的情况下才会返回该对象,因为false&&任何值都是false;
var o = new Object()
    alert(Boolean(true && o)); ==>true
  • 如果两个操作数都是对象,则返回第二个操作数;
  • 如果有一个操作数是null,NaN或者undefined,则返回null,NaN或者undefined。

3、逻辑或:
规则:

  • 如果第一个操作数是对象,则返回第一个操作数。
  • 如果第一个操作数的求值结果为false,则返回第二个操作数。
  • 如果两个操作数都是对象,则返回第一个操作数。
  • 如果有一个操作数是null,NaN或者undefined,则返回null,NaN或者undefined。
运算符:

乘法:(*),除法:(/),求余:(%)
如果参与计算的某个操作数不是数值,后台会先使用Number()转型函数将其转换为数值。
加法:(+)

  • 如果有一个操作数是字符串,则将另一个操作数转换为字符串,然后将两个字符串拼接起来。
  • 如果两个都是数字,则执行数学相加。
  • 如果有一个操作数是对象、数值或布尔值,则调用它们的toString()方法取得相应的字符串值,然后再应用前面关于字符串的规则。对于undefined和null,则分别调用String()函数并取得字符串”undefined”和”null”。

减法:(-)

  • 如果有一个操作数是字符串、布尔值、null 或undefined,则先在后台调用Number()函数将其转换为数值,然后再根据前面的规则执行减法计算。如果转换的结果是NaN,则减法的结果就是NaN;
  • 如果有一个操作数是对象,则调用对象的valueOf()方法以取得表示该对象的数值。如果得到的值是NaN,则减法的结果就是NaN。如果对象没有valueOf()方法,则调用其toString()方法并将得到的字符串转换为数值。
关系运算符

“>,<,>=,<=”等运算符都返回一个布尔值,遵循以下规则:

  • 如果两个操作数都是数值,则执行数值比较。
  • 如果两个操作数都是字符串,则比较两个字符串对应的字符编码值。
'23'<'3' ==> true
//"2"的字符编码是50,而"3"的字符编码是51
  • 如果一个操作数是数值,则将另一个操作数转换为一个数值,然后执行数值比较。
  • 如果一个操作数是对象,则调用这个对象的valueOf()方法,用得到的结果按照前面的规则执行比较。如果对象没有valueOf()方法,则调用toString()方法,并用得到的结果根据前面的规则执行比较。
  • 如果一个操作符是布尔值,则转化为数值比较
相等操作符

ECMAScript 的解决方案就是提供两组操作符:相等和不相等——先转换再比较,全等和不全等——仅比较而不转换。
转换规则:

  • 如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转换为数值;
  • 如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值——false 转换为0,而 true 转换为1;
  • 如果一个操作数是对象,另一个操作数不是,则调用对象的valueOf()方法,用得到的基本类型值按照前面的规则进行比较;
  • null和undefined在使用相等操作符比较时会返回true
  • NaN与任何值做相等判断都会返回false,即便NaN自身也是。
  • 如果两个操作数都是对象,则比较它们是不是同一个对象。如果两个操作数都指向同一个对象,则相等操作符返回true;否则,返回false。

全等和不全等操作符(===和!==)不会对比较的操作数进行类型转换,因此他们比较的是在两个操作数未经转换时是否相等。

条件操作符:

variable = boolean_expression ? true_value : false_value;

例如:
3 > 5 ? true:false ==>false

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员青戈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值