JS02--操作符

JavaScript操作符

操作符

一元加操作符

放在数值前面,对数值不会产生任何影响。例如:

1
var num=25num=+num//结果依然为25

一元减操作符主要用于表示负数,例如将1转换成-1.例如:

1
var num=25num=-num//结果依然为-25

位操作符

位操作符就是把数字全部转换成二进制01表示,然后依次对每个位进行相关的操作。

  • 按位非(“~”):按位非操作的本质:操作数的负值减1。对比减一操作和按位非操作来说,由于按位非是在数值表示的最底层执行操作,因此速度更快。
  • 按位与(“&”)
  • 按位或(“|”)
  • 按位异或(“^”):相同为0,不同为1
  • 左移(“<<”):左移不会影响操作数的符号位。出现空位用0填充。
  • 有符号的右移(“>>”):会将数值向右移动,但保留其符号位。遇到空位,就用符号位填充
  • 无符号右移:(“>>>”):会将数值的所有32位都向右移动。遇到空位,用0填充。

布尔操作符

  • 逻辑非(“!”);首先会将它的操作数转换为一个布尔值,然后再对其求反。返回的一定是布尔值
  • 逻辑与(“&&”)适用于任何类型的操作数,但是不一定返回布尔值。如果第一个操作数是对象,则返回第二个操作数;如果第二个操作数是对象,则只有在第一个操作数的求值结果为true的情况下才会返回该对象;如果两个操作数都是对象,则返回第二个操作数;如果第一个操作数是null,则返回null;如果第一个操作数是NaN,则返回NaN;如果第一个操作数是undefined,则返回undefined。逻辑与属于短路操作,即如果第一个操作数能够决定结果,那么就不会再对第二个操作数求值。
  • 逻辑或(“||”)如果第一个操作数是对象,则返回一个操作数;如果第一个操作数的求值结果为false,则返回第二个操作数;如果两个操作数都是对象,则返回第一个操作数;如果两个操作数是null,则返回null;如果两个操作数是NaN,则返回NaN;如果两个操作数是undefined,则返回undefined。逻辑与属于短路操作,即如果第一个操作数能够决定结果,那么就不会再对第二个操作数求值。

乘性操作符

  • 乘法(*) 除法(/
  • 求模(%

加性操作符

  • 加法(+)数值算法同加法,字符串:如果两个都是字符串,就直接将两个操作符拼接起来,如果一个是字符串,则将另一个操作数转换为字符串,然后再将两个字符串拼接起来。
  • 减法(-)数值算法同剑法,与加法不同的是,如果一个操作数是字符串或者非数值型,则先将其转换成数值然后再相减。

关系操作符

小于(<)、大于(>)、小于等于(<=)、大于等于(>=)这几个操作符都返回一个布尔值
如果是一个字符跟一个数值比较,会把该字符转换为数值,然后再比较

相等操作符

  • 相等和不相等(==、!=):先转换再比较。null和undefined值是相等的;如果两个操作符都是对象,则比较他们是不是指向同一个对象。
  • 全等和不全等(===、!==):仅比较不转换
    1
    2
    var result1=(“55”==55);//true,因为转换后相等,null和undefined值是不相等的,因为他们是不同类型的值
    var result1=(“55”===55);//false,因为不同的数据类型不相等

赋值操作符

1
(=)、(*=)、(/=)、(+=)、(-=)、(%=)、(<<=)、(>>=)、(>>>=)

switch语句在比较值时用的是全等操作符,因此不会发生类型转换(例如“10”不等于10)
函数在定义时不必指定是否返回值,函数会在执行完return语句之后停止并立即退出,因此,位于return语句之后的任何代码都不会执行。return语句也可以不带有任何返回值。
严格模式对函数有一些限制:

1
2
3
不能把函数命名为evalarguments
不能把参数命名为evalarguments
不能出现两个命名参数同名的情况

理解参数

ECMAScript函数的参数与大多数其他语言中函数的参数有所不同。ECMAScript不介意传递进来多少个参数,也不在乎传进来参数是什么数据类型。也就是说,即便我们定义的函数只接收两个参数,在调用这个函数时也未必一定要传递两个参数。可以传递一个、三个甚至不传递参数,而解析器永远不会有什么怨言。之所以会这样,是因为ECMAScript中的参数在内部使用一个数组来表示的。函数接收到的始终都是这个数组,而不关系数组中包含哪些参数(如果有参数的话)。如果这个数组中不包含任何元素,无所谓;如果包含多个元素,也没有问题。实际上,在函数体内可以通过arguments对象来访问这个参数数组,从而获取传递给函数的每一个参数。

其实arguments对象只是与数组类似,因为可以使用方括号语法访问它的每一个元素(即第一个元素是arguments【0】,第二个元素是arguments【1】,以此类推),使用length属性来确定传递进来多少个参数。

ECMAScript函数的一个重要特点:命名的参数只提供便利,但不是必须的。如果有参数,对应位置的参数可以和arguments对象元素参数互用。

关于arguments的行为,还有一点比较有意思。那就是它的值永远与对应命名参数的值保持同步。

没有传递值的命名参数将自动赋予undefined值。

ECMAScript函数没有重载,因为ECMAScript函数没有签名,因为其参数是由包含零或多个值的数组来表示的。而没有函数签名,真正的重载是不可能做到的。

ECMAScript如果定义了两个名字相同的函数,则该名字只属于后定义的函数

-------------本文结束感谢您的阅读-------------