JavaScript运算符详解


  1、javascript 存在下列 品种的运算符:算术运算符;等同运算符与全同运算符; 比较运算符;

 

  2、 目标分类:字符串运算符;逻辑运算符;逐位运算符;赋值运算符;

 

  3、特别运算符:条件运算符;typeof运算符; 缔造对象运算符new;delete运算符;void运算符号;逗号运算符;

 

  算术运算符:+ 、 - 、* 、 / 、 % 、 -(一元取反) 、 ++ 、 --

  等同运算符与全同运算符:== 、 ===、 !== 、 !===

   比较运算符:< 、 > 、 <= 、 >=

  字符串运算符::< 、 > 、 <= 、 >= 、 = 、 +

  逻辑运算符:&& 、 ||、 !、

  赋值运算符:=、 +=、 *=、 -=、 /=

 

   规定:

 

  一、 定然要 留神传递给运算符的数据类型和返回的数据类型!不同的运算符都 期冀它的运算数 抒发式计算出的 后果 相符某种数据类型 。

 

  例如:对字符串是不能进行乘法运算的,"a" * "b" 是不合法的,然而,在可能的状况下,javascript会把 抒发式转换成正确的类型, 因此, 抒发式 "3" * "5" 是合法的,javascript将字符串转换成数字执行运算, 后果返回的是数字15,而不是字符串"15" 。

 

  二、+ 依据运算数的不同, 存在不同的 体现:

 

  字符串 + 字符串 = 字符串(被衔接);"a" + "b" = "ab" "5" + "6" = "11"

  字符串 + 数字 = (字符串转换成数字)字符串(被衔接);"a" + 5 = "a5" 5被转换成字符串 "1" + 0 = "10"

  数字 + 数字 = 数字(相加)5 + 5 = 10 。

 

  三、 留神运算符的 联合性,有些运算符从左到右的 联合性;有些从右到左 联合性 。

 

  例如:w = a + b + c 等同于 w = (a + b) + c;

  w = ---b 等同于 w = - ( - ( -b ) ); w = a = b = c 等同于 w= ( a = ( b = c ))

  一元运算符、赋值运算符、三元运算符的 联合性是从右到左的;

 

  四、算术运算符 规定:

 

  “+”: 可以进行“加法”与“衔接”运算;假如2个运算符中的一个是字符串,javascript就将另一个转换成字符串, 而后将2个运算数衔接起来 。

  “+”:假如一个运算数是对象,javascript就会将对象转换成数字做加法运算或者字符串做衔接运算;

  “-”“*”“/” 假如2个运算数中的一个是是非数字,则将它转化成数字执行数学运算 。

  “/” 在javascript中,由于全部的数都是浮点数,除法的 后果都是浮点数,5 / 2 = 2.5 ;除数为0的 后果为正负无穷;0/0为NaN;

  “%”模运算符:计算第一个运算数对第二个运算数的模,便是第一个运算数被第二个运算数除时,返回余数 。假如运算数是非数字的,则转换成数字 。

  “-”一元取反:将运算数取反,假如运算数不是数字,则转化成数字 。

  “++”“--”增量运算符/减量运算符号:运算数必须是一个变量、树组的一个元素或对象的一个属性 。假如运算数不是数字,则转换成数字 。

   留神:假如“++”位于运算数之前,先对运算数进行增量, 而后计算运算数增进后的值 。

  假如“--”位于运算数之后,先计算运算数未增进之前的值, 而后对运算数增量 。

  例如:i = 1; //赋值给i值1

  j = ++i; //先将i增量为2, 而后将2赋值给j,i的值是2,j的值也是2 。

  i = 1; //赋值给i值1

  j = i++; //先将i赋值给j, 而后对将i值增量到2,i的值是2,j的值是1 。

  减量运算符“--”与“++” 雷同 。

 

  五、等同运算符与全同运算符:

 

  (一)“==”“!==”等同运算符与非等同运算符:

   比较2个运算数,返回一个不布尔值 。

   比较数值、字符串、布尔值 使用的都是量值 。当且仅当两个变量 存放的值相等的时候,他们才相等 。

   比较对象、数组、函数的时候, 使用的是 引用,惟独2个变量 引用的是同一个对象时,他们才是相等的

   。两个不同的数组是 彻底不同的, 即便他们 存在 彻底 雷同的元素 。关于 存放对象、数组、函数的 引用的变量来

  说,惟独当他们 引用的是同一个对象、数组、函数的时候,他们才相等 。

 

   留神!应遵照的 准则:

 

  当两个运算数的类型不同时:将他们转换成 雷同的类型,

  1)一个数字与一个字符串,字符串转换成数字之后,进行 比较 。

  2)true转换为1、false转换为0,进行 比较 。

  3)一个对象、数组、函数 与 一个数字或字符串,对象、数组、函数转换为原始类型的值, 而后进行 比较 。(先 使用valueOf,假如不行就 使用toString)

  4) 其余类型的组合不星等 。

  想两个运算数类型 雷同,或转换成 雷同类型后:

  1)2个字符串:同一位置上的字符相等,2个字符串就 雷同 。

  2)2个数字:2个数字 雷同,就 雷同 。假如一个是NaN,或两个都是NaN,则不 雷同 。

  3)2个都是true,或者2个都是false,则想同 。

  4)2个 引用的是同一个对象、函数、数组,则他们相等,假如 引用的不是同一个对象、函数、数组,则不 雷同, 即便这2个对象、函数、数组 可以转换成 彻底相等的原始值 。

  5)2个null,或者2个都是未定义的,那么他们相等 。

  “!=”非等同运算符:与等同运算符检测的 后果相反 。

  (二)“===”“!===”全同运算符与非全同运算符号:

  全同运算符遵照等同运算符的 比较 规定,然而它不对运算数进行类型转换,当两个运算数的类型不同时,返回false;惟独当两个运算数的类型 雷同的时候,才遵照等同运算符的 比较 规定进行 比较 。

  “!==”非全同运算符与全同运算符 比较的 后果相反 。假如两个运算数的类型或者值不同的时候,返回true 。

 

  六、 比较运算符:

 

  这些 比较运算符用于 比较不同类型的值, 后果返回一个布尔值 。

  “<”“>”“<=”“>=”

   留神 规定: 比较的运算数 可以是任意类型的,然而不得不在数字和运算数上执行 。不是数字和字符串的运算数将被转换成数字或字符串 。

  1)假如两个运算数都是数字,或者都 可以转换成数字,则依照数字的大小进行 比较;

  2)假如两个运算数都是字符串,或者都 可以转换成字符串,则将依照字母顺序进行 比较;

  3)假如字符串遇到数字,则将字符串转换成数字进行 比较 。

  4)假如运算数既不能转换成数字,也不能转换成字符串,则返回 后果false 。

 

  七、字符串运算符:

 

  并没有专用的字符串运算符,只不过有些运算符在遇到字符串运算数的时候, 体现不同 。

  (一)“+”衔接2个字符串;

  1)当2个运算数都是字符串的时候,衔接起来;

  2)当其中有一个是数字的时候,将数字转换成字符串,衔接起来;

  (二)“>”这样的 比较运算符通过 比较确认两个字符串的顺序, 比较采纳字符的顺序,较小的位于教大的前面,大写字母位于小写字母之前 。

  (三)“+”的作用 步骤取决于计算顺序,

  如:s = 1 + 2 +"var" 则:返回 后果3var; 由于先计算1+2, 而后将 后果3转换成字符串与"var"衔接;

  如:s = "var" + 1 + 2 则:返回 后果var12; 由于先计算var与1的衔接,在将 后果var1与转换成字符串的2衔接起来 。

 

  八、逻辑运算符:

 

  用于执行布尔运算, 一般和 比较运算符一同 使用,来 示意复杂的 比较运算 。

  “&&” 逻辑与运算、“||”逻辑或运算符、“!”逻辑非运算符

  (一)“&&”当两个运算数都是布尔值的时候,逻辑与对他们进行and操作,即:当且仅当两个布尔值都是true的时候,返回 后果true,不然返回false 。

   留神:实际 体现

  “&&”将检测第一个 抒发式运算数布尔值,假如第一个运算数 抒发式返回false,则返回左边第一个运算数 抒发式的值:false;不然将 接续检测第二个即右边的运算数 抒发式, 而后返回第二个运算数 抒发式的值;

  例如:if (a = b) stop(); 与 (a = b) && stop(); 等价

  不赞成 使用这个 步骤,由于运算符右边的代码不能 保障会被执行,

  例如:if ((a < b) && (b++ <10) ) stop();假如运算符右边的增量必须的话,却有可能由于前面的返回值而不被执行,一般反对在&&的右边 使用 存在 其余作用的 抒发式(赋值、函数调用、增减量);

  将“&&”看作是一个布尔代数的运算符,会更 方便与安全 。

  (二)“||”当两个运算数都是布尔值的时候,逻辑或对他们进行or操作,即:当两个布尔值有一个是true的时候,返回 后果true,不然返回false 。

   留神:实际 体现

  “||”将检测第一个 抒发式运算数布尔值,假如第一个运算数 抒发式返回true,则返回左边第一个运算数 抒发式的值:true;不然将 接续检测第二个即右边的运算数 抒发式, 而后返回第二个运算数 抒发式的值;

  同样不赞成 使用这个 步骤,由于运算符右边的代码不能 保障会被执行,

  一般反对在||的右边 使用 存在 其余作用的 抒发式(赋值、函数调用、增减量);

  将“||”看作是一个布尔代数的运算符,会更 方便与安全 。

  (三)“!”逻辑非是一个一元运算符,放在运算数之前,它的 目标是对运算数取反 。

 

  九、赋值运算符:

 

  (一)“=”是赋值运算符;他总是 期冀左边的运算数是一个变量、数组的一个元素或对象的一个属性;

   期冀右边是一个任意类型的任意的值;

  从右到左的 联合性,假如一个 抒发式中有多个赋值运算符,则从最右边开始计算 。

   留神:每一个赋值 抒发式都有一个值,便是运算符右边的值;

  (二) 可以 使用带操作的赋值运算

  “+=” 左边的值外加右边的值后,赋值于左边的值 。“-=”“/=”“*=” 步骤一样;

 

  十、 其余运算符:

 

  “?:”条件运算符是唯一的一个三元运算符;

  一个 抒发式的布尔 后果? 抒发式1(任意类型的任意值): 抒发式2(任意类型的任意值);

  依据第一个运算数的布尔值 后果,假如为true,则执行第二个运算数 抒发式,返回第二个运算数 抒发式的值;假如第一个运算数的布尔值 后果是false,则执行第三个运算数 抒发式,返回第三个运算数 抒发式的值 。