JS 操作符(四)


ToBoolean操作

参数类型结果
Undefinedfalse
Nullfalse
Boolean结果等于输入的参数(不转换)
Number如果参数为+0,-0或NaN,则结果为false;否则为true
String如果参数为空字符串,则结果为false;否则为true
Objecttrue

逻辑NOT运算符
由感叹号(!)表示,逻辑NOT运算符返回的一定是Boolean值。
运算行为如下:

  • 如果运算数是对象,返回false
  • 如果运算数是数字0,返回true
  • 非空字符串返回false,空字符串返回true
  • 如果运算数是null,返回true
  • 运算数是NaN,返回true
  • 运算数是undefined,返回true
    可以使用两次!!来获取运算数的布尔值

逻辑AND运算符
使用双引号(&&)表示

运算数1运算数2结果
truetruetrue
truefalsefalse
falsetruefalse
falsefalsefalse

逻辑AND运算的运算数可以是任何类型的,不止是Boolean值。
如果某个运算数不是原始的Boolean型值,逻辑AND运算并不一定返回Boolean值:

  • 一个运算数是对象,另一个是Boolean值,返回该对象
  • 两个运算数都是对象,返回第二个对象
  • 某个运算数是null,返回null
  • 某个运算数是NaN,返回NaN
  • 某个运算数是undefined,发生错误
    ECMAScript中的逻辑AND运算是简便运算,即如果第一个运算数决定了计算结果,就不再计算第二个运算数。对于逻辑AND运算来说,如果第一个运算数是false,那么无论第二个运算数的值是什么结果都不会是true
var bFalse = false;
var bResult = (bFalse && bUnknown);
alert(bResult);			//输出 "false"

逻辑OR运算符
使用双竖线(||)表示:

运算数1运算数2结果
truetruetrue
truefalsetrue
falsetruetrue
falsefalsefalse

与逻辑AND运算符相似,如果某个运算数不是Boolean值,逻辑OR原酸并不一定返回Boolean值:

  • 如果一个运算数是对象,并且该对象左边的运算数值为false,则返回该对象
  • 如果两个运算数都是对象,返回第一个对象
  • 如果最后一个运算数是null,并且其他运算数值均是false,则返回null
  • 如果运算数和NaN,并且其他运算数值均为false,则返回NaN
  • 如果两个运算数都是undefined,返回undefined

和逻辑AND运算符一样,逻辑OR运算也是简便运算。如果第一个运算数值为true,就不再计算第二个运算数

var bTrue = true;
var bResult = (bTrue || bUnknown);
alert(bResult);			//输出 "true"

乘法运算符
用(*)表示:

  • 结果溢出生成结果为Infinity或-Infinity
  • 如果某个运算数是NaN,结果为NaN
  • Infinity乘以0,结果为NaN
  • Infinity乘以0以外的任何数字,结果为Infinity或-Infinity
  • Infinity乘以Infinity,结果为Infinity
  • 如果一个操作数不是数值,则在后台调用Number()将其转换为数值,然后再应用上面的规则

除法运算
用(/)表示:

  • 如果结果太大或太小,生成结果是Infinity或-Infinity
  • 如果某个数是NaN,结果为NaN
  • Infinity被任何数字除,结果为Infinity,被Infinity除结果是NaN
  • 0除一个任何非无穷大的数字,结果是Infinity或-Infinity
  • Infinity被0以外的任何数字除,结果为Infinity或-Infinity
  • 如果有一个操作数不是数值,则调用Number()将其转换为数值,然后在应用上面的规则

求模
求模(余数)操作符有一个百分号(%)表示。

  • 如果两个操作数都是数值,执行常规的除法计算,返回除得的余数
  • 如果被除数是无穷大值而除数是有限大的数值,则结果返回NaN
  • 如果被除数是有限大的数值而除数是零,则结果为NaN
  • 如果是Infinity被Infinity除,结果为NaN
  • 如果被除数是有限大的数值而除数是无穷大的数值,则结果是被除数
  • 如果被除数是0,则结果为0
  • 如果有操作数不是数值,调用Number()转换为数值,在应用上述规则

比较数字和字符串

var bResult = "25" < "3"
alert(bResult) //输出"true"

上述代码比较的是字符串"25"和"3"。两个运算数都是字符串,多以比较的是它们的字符代码(“2” 的字符代码是 50,“3” 的字符代码是 51)。

var bResult = "25" < 3
alert(bResult) //输出"false"

上述代码,字符串"25"将被转化成数字25,然后与数字3进行比较。
无论何时比较一个数字和一个字符串,ECMAScript都会把字符串换成数字,然后按照数字顺序比较它。

var bResult = "a" < 3;
alert(bResult);

上述代码中"a"不能转换成有意义的数字。不过,如果对它调用parseInt()将会返回NaN,任何包含NaN的关系运算符都要返回false。

var bResult = "a" >= 3;
alert(bResult);

同理,上述代码也返回false

等号与非等号
在 ECMAScript 中,等号由双等号(==)表示,当且仅当两个运算数相等时,它返回 true。非等号由感叹号加等号(!=)表示,当且仅当两个运算数不相等时,它返回 true。为确定两个运算数是否相等,这两个运算符都会进行类型转换。
执行类型转换的规则:

  • 如果一个运算数是Boolean值,在检查相等性之前,把它转换成数字值。false转换成0,true为1
  • 如果一个运算数是字符串,另一个是数字,在检查想等性之前,要尝试把字符串转换成数字。
  • 如果一个运算数是对象,另一个是字符串,在检查相等性之前,要尝试把对象转换成字符串
  • 如果一个运算数是对象,另一个是数字,在检查相等性之前,要尝试把对象转换成数字

在比较时,该运算符还要遵守下列规则:

  • 值null和undefined相等
  • 在检查相等性时,不能把null和undefined转换成其他值。
  • 如果某个运算数是NaN,等号将返回false,非等号将返回true
  • 如果两个运算数都是对象,那么比较的是它们的引用值。如果两个运算数指向同一个对象,那么等号返回true,否则两个运算数不等。

注:即使两个数都是NaN,等号仍然返回false,因为根据规则,NaN不等于NaN

表达式
null==undefinedtrue
“NaN”==NaNfalse
5==NaNfalse
NaN==NaNfalse
NaN!=NaNtrue
false==0true
true==1true
true==2false
undefined==0false
null==0false
“5”==5true

全等号和非全等号
全等号(===),非全等号(!==)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值