专栏首页灵儿的笔记JavaScript的操作符

JavaScript的操作符

01) 一元操作符

++,--,+,-操作符应用任何类型数值都返回一个【数值类型】,先将任意类型的值转换为Number然后进行运算(通过Number()方法进行转换)

1.递增 ++

var a = "11";
1+a++;
1+ ++a;

前置:操作该变量之前进行递增或者递减操作

后置:操作该变量之后进行递增或者递减操作

对任意数据类型的操作数都适用,使用前先将其转换为数字(Number()),然后再进行运算,在应用于对象的时候,优先先调用对象的valueOf方法,以取得一个可供操作的值,如果子类对象仅重写了toString(),调用该方法。

2.递减 --

前置:操作该变量之前进行递增或者递减操作

后置:操作该变量之后进行递增或者递减操作

对任意数据类型的操作数都适用,使用前先将其转换为数字,然后再进行运算在应用于对象的时候,先调用对象的valueOf方法,以取得一个可供操作的值,如果子类对象仅重写了toString(),调用该方法。

3.加 +

相当于调用Number();

var a = "12"
+a ; // 12  相当于调用了Number("12")

4.减 -

将一元减应用于数值时,数值会变成负数。

将一元减应用于非数值时,遵循与一元加操作符相同的规则,最后将得到的数值转化为负数

02) 布尔操作符, 非(NOT)

逻辑非 !

该操作符应用任何类型数值都返回一个【布尔值】。先将任意类型的数值转换为Boolean,然后取反,

!a ==> !Boolean(a)
!0 //true
!"" //true
!NaN //true
!false //true
连用两次逻辑非 ,就可以将任意数据类型转化为Boolean类型,!!a ==> Boolean(a)
!!"" //false

03) 逻辑与 && (同真才真,有假则假) 也被称为短路语句

可应用于任意数值。如果有一个操作数不是布尔类型,逻辑与就不一定返回boolean类型

1.如果第一个操作数是

null,NaN,undefined,false,0,""可被转换为false的值的时候返回该值

2.如果第一个数其他,返回第二个数

var s1 = 8;
var s2 = "briup";
var s3 = "";
var result = s1 && s2; //briup
var result2 = s3 && s2; //空字符串

04) 逻辑或 ||(有真则真,同假才假)

false ||

如果两个操作数都是null,NaN,undefined,false,0,""可被转换为false的值的时候返回该值

如果第一个操作数是null,NaN,undefined,false,0,"" 则返回第二个操作数

05) 加性操作符

1. 加法 +

m + n

1) 当m,n不为String,Object类型的时候,先将m,n转换为Number类型,然后再进行计算

true + false;  //1;Number(true)+Number(false);
true + 1;  //2;Number(true) + 1
null + undefined; //NaN;Number(undefined) -> NaN
2) 当m,n有一个为String,无论另一个操作数为何(但不为对象)都要转换为String,然后再进行拼接
"1" + true; // 1true
"1" + undefined;// 1undefined
"1" + 1; // 11

3) 当m,n 有一个为对象,如果该对象既重写toString,又重写了valueOf方法,先调用valueOf方法获取返回值,将该返回值和另外一个操作数进行运算。如果该对象没有重写valueOf方法,将调用toString方法获取返回值,将该返回值和另外一个操作数进行运算。

var o = {
name:"briup",
valueOf:function(){
return "1";
}
}
o+1; //2;o+1

2. 减法 -

返回值为【数值类型】。无论操作数为任何类型,先将其使用Number()转换器转换为Number类型,然后再计算。

true - 1; //0; 1-1
null - true; //-1 ; 0-1
1 - undefined //NaN
var o = {
name:"briup",
valueOf:function(){
return 1;
}
}
o-1; //0; 1-1

06) 乘性操作符

返回值为【数值类型】当操作数为非数值的时候执行自动的类型转化Number()

1. 乘法 *

如果两个数都是数值,执行常规的乘法计算

如果一个操作数是NaN,结果为NaN

超过数值范围返回Infinity

如果有一个操作数不是数值,则先调用Number()将其转换为数值。

2. 除法 /

如果一个操作数是NaN,结果为NaN (0/0 ; NaN)

一个非0值除0 Infinity

如果有一个操作数不是数值,则先调用Number()将其转换为数值。

var s1 = 5;
var s2 = 2;
var result = s1/s2;  //2.5

3. 取余 %

如果两个数都是数值,执行常规的取余计算

如果一个操作数是NaN,结果为NaN(任意数%0 ; NaN)

如果有一个操作数不是数值,则先调用Number()将其转换为数值。

07) 关系操作符

< > <= >= ,返回一个【Boolean】值

1.如果两个操作数是字符串,比较字符串中对应位置的每个字符的字符编码值

"a">"b" //false
"1">"a" //false

2.如果一个操作数是数值,将另外一个操作数也转换为数值进行比较

"3">1; //true
3>true; //true 3>Number(true)
3>undefined; //false Number(undefined)=NaN ;任何数和NaN比较结果都为false

3.如果一个操作数是对象,先调用valueOf(),再调用toString()将返回值与另外一个操作数比较,如果没有重写toString() valueOf()则始终为false

var o = {
name:"briup",
valueOf:function(){
return "13";
}
}
o>2 // true ; "13">2

08) 相等操作符,返回【Boolean】

1.相等和不相等 ==, != (先转换在比较)

1)Number类型与boolean类型,比较前先将Boolean转换为数值。

2)Number类型与字符串类型,比较前先将字符串转换为数值

3)Number类型与undefined类型,结果为 false

4)Number类型与null类型,结果为 false

5)如果两个都是字符串,比较字符序列

6)如果两个都是对象,比较的是对象的引用地址

7)null == undefined //true

8)NaN与任何值(包括NaN)比较结果都为false

如果两个数都为对象,则比较他们是不是同一个对象,如果两个操作数都指向同一个对象,返回true

如果一个数是对象,另外一个数不是,则调用valuesOf()方法,用得到的基本数据类型进行比较

2.全等和不全等

仅比较不转换,先比较两个数所属的数据类型,如果类型不同则不同,如果类型相同,再继续比较两个数的值

console.log("55" == 55); true
console.log("55" === 55);false
null == undifined; //true
null === undifined; //false

09) 三目运算符 ? :

variable = boolean_expression ? true_value : false_value;

如果boolean_expression为true,将true_value赋给variable,否则将false_value赋给variable

例如:求任意两个数之间最大值

      function max(m,n){
return m>n?m:n; //如果m>n为true返回m,如果m>n为false,返回n
      }

10) 赋值运算符 =

将右侧的值赋给左侧的变量

可以和其他算术运算符连用 *= /= %= += -=

  var a = 4;
       a *= 3; //=> a = a*3;

11) 逗号操作符

可以在一条语句中执行多个操作

       var num1=1,num2 = 2, num3 = 3;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JavaScript的类型转换

    Undefined n/a undefined (n/a not applicable 不适用)

    小小鱼儿小小林
  • 弹窗加密代码(可关闭)

    小小鱼儿小小林
  • 网页弹窗加密代码(可关闭)

    小小鱼儿小小林
  • 以QQ邮箱为例简说discuz邮箱验证设置

    之前在邮箱设置那困了好久,始终不能使discuz发送邮件验证信息等,直到今天才懂了原因所在,原来之前把端口设错了。

    汐楓
  • n ../../node_modules/@storybook/channels/dist/index.d.ts:25:9 - error TS1086: An accessor cannot ...

    用户1437675
  • 死循环的妙用

    做开发写程序,最麻烦就是写循环。一个程序功能里面如果多于5个循环的,那么要么这个业务逻辑有问题,要么就是开发的人太Yang。用5个循环去做一个业务逻辑,耗时耗资...

    谭广健
  • 20180803_ARTS_week06

    这个是个比较不好的解法,就是像题目介绍里面那样先把这个『之』字形给做出来,然后再逐行读成字符串,但是通过这个比较好帮助我们理解这个题目。

    Bob.Chen
  • 简单说 !![]==true 与 []==true 引发的思考

    首先说一下,如果你看到这些代码,能想到 相等运算符(== ),两个操作数类型不同时,进行的转换,那么你已经接近答案了。

    FEWY
  • JavaScript笔记(三)

    两个数字相加,返回数字相加的和;两个字符串相加,变量会连接成一个字符串;如果数字与字符串相加,返回字符串。

    木尤
  • 使用typescript开发angular模块(编写模块)

    之前在使用typescript开发angular模块(发布npm包)一文中基本掌握了怎么发布一个typescript写的npm包。但是离目标还有段距离。

    易兒善

扫码关注云+社区

领取腾讯云代金券