⭐ 作者简介:码上言
⭐ 代表教程:Spring Boot + vue-element 开发个人博客项目实战教程
⭐专栏内容:个人博客系统
⭐我的文档网站:http://xyhwh-nav.cn/
⭐微信公众号:码上言
操作符
ECMA-262描述了一组可用于操作数据值的操作符,包括数学操作符(如加、减)、位操作符、关系操作符和相等操作符等。
1. 一元操作符
一元操作符是指只操作一个值的操作符。在JavaScript中,一元操作符可以对变量或值进行各种操作,例如递增(++)、递减(–)、取反(-)、逻辑非(!)等。这些操作符可以应用于数字、字符串和布尔值等不同类型的数据。一元操作符的使用可以简化代码,提高效率,但在使用时需要注意其影响范围和执行顺序。
1.1. 递增/递减操作符
递增和递减操作符直接照搬自C语言,但有两个版本:前缀版和后缀版。顾名思义,前缀版就是位于要操作的变量前头,后缀版就是位于要操作的变量后头。前缀递增操作符会给数值加1,把两个加号(++
)放到变量前头即可。
无论使用前缀递增还是前缀递减操作符,变量的值都会在语句被求值之前改变。
后缀版与前缀版的主要区别在于,后缀版递增和递减在语句被求值后才发生。
这4个操作符可以作用于任何值,意思是不限于整数——字符串、布尔值、浮点值,甚至对象都可以。递增和递减操作符遵循如下规则。
- 对于字符串,如果是有效的数值形式,则转换为数值再应用改变。变量类型从字符串变成数值。
- 对于字符串,如果不是有效的数值形式,则将变量的值设置为
NaN
。变量类型从字符串变成数值。 - 对于布尔值,如果是
false
,则转换为0再应用改变。变量类型从布尔值变成数值。 - 对于布尔值,如果是
true
,则转换为1再应用改变。变量类型从布尔值变成数值。 - 对于浮点值,加1或减1。
- 如果是对象,则调用其
valueOf()
方法取得可以操作的值。对得到的值应用上述规则。如果是NaN
,则调用toString()
并再次应用其他规则。变量类型从对象变成数值。
1.1.2. 加和减操作符
在ECMAScript中跟在高中数学中的用途一样。
一元加由一个加号(+)表示,放在变量前头,对数值没有任何影响。 如果将一元加应用到非数值,则会执行与使用Number()转型函数一样的类型转换:布尔值false和true转换为0和1,字符串根据特殊规则进行解析,对象会调用它们的valueOf()和/或toString()方法以得到可以转换的值。
一元减由一个减号(-)表示,放在变量前头,主要用于把数值变成负值,如把1转换为-1。在应用到非数值时,一元减会遵循与一元加同样的规则,先对它们进行转换,然后再取负值。
2. 布尔操作符
对于编程语言来说,布尔操作符跟相等操作符几乎同样重要。如果没有能力测试两个值的关系,那么像if-else
和循环这样的语句也没什么用了。布尔操作符一共有3个:逻辑非、逻辑与和逻辑或。
2.1. 逻辑非
逻辑非操作符由一个叹号(!
)表示,可应用给ECMAScript中的任何值。
- 如果操作数是对象,则返回false。
- 如果操作数是空字符串,则返回true。
- 如果操作数是非空字符串,则返回false。
- 如果操作数是数值0,则返回true。
- 如果操作数是非0数值(包括Infinity),则返回false。
- 如果操作数是null,则返回true。
- 如果操作数是NaN,则返回true。
- 如果操作数是undefined,则返回true。
逻辑非操作符也可以用于把任意值转换为布尔值。同时使用两个叹号(!!
),相当于调用了转型函数Boolean()
。
2.2. 逻辑与
逻辑与操作符由两个和号(&&
)表示,应用到两个值。
第一个操作数 | 第二个操作数 | 结果 |
---|---|---|
true | true | true |
true | false | false |
false | true | false |
false | false | false |
逻辑与操作符可用于任何类型的操作数,不限于布尔值。如果有操作数不是布尔值,则逻辑与并不一定会返回布尔值,而是遵循如下规则。
- 如果第一个操作数是对象,则返回第二个操作数。
- 如果第二个操作数是对象,则只有第一个操作数求值为true才会返回该对象。
- 如果两个操作数都是对象,则返回第二个操作数。
- 如果有一个操作数是null,则返回null。
- 如果有一个操作数是NaN,则返回NaN。
- 如果有一个操作数是undefined,则返回undefined。
逻辑与操作符是一种短路操作符,意思就是如果第一个操作数决定了结果,那么永远不会对第二个操作数求值。
2.3. 逻辑或
逻辑或操作符由两个管道符(||)表示。
第一个操作数 | 第二个操作数 | 结果 |
---|---|---|
true | true | true |
true | false | true |
false | true | true |
false | false | false |
与逻辑与类似,如果有一个操作数不是布尔值,那么逻辑或操作符也不一定返回布尔值。它遵循如下规则。
- 如果第一个操作数是对象,则返回第一个操作数。
- 如果第一个操作数求值为false,则返回第二个操作数。
- 如果两个操作数都是对象,则返回第一个操作数。
- 如果两个操作数都是null,则返回null。
- 如果两个操作数都是NaN,则返回NaN。
- 如果两个操作数都是undefined,则返回undefined。
同样与逻辑与类似,逻辑或操作符也具有短路的特性。