JavaScript运算符

一、JavaScript 算数运算符

 用于数值运算

算数运算符 描述
+ 加法
- 减法
* 乘法
/ 除法
% 求余/取模
++ 自增(前++:先赋值,后运算;后++:先运算,后赋值)
-- 自减

1.1 "+" 除了算数运算符中的加法,也是连接符

<script>
    var x = 1 + 2 + "3";
    console.log('1 + 2 + "3" = ' + x); //33

    x = "1" + 2 + 3;
    console.log('"1" + 2 + 3 = ' + x); //123

    x = "1" + (2 + 3);
    console.log('"1" + (2 + 3) = ' + x); //15

    // 除+外,其他运算符中的String类型会先转换为Number类型,然后才计算
    x = "4" - 14;
    console.log('"4" - 14 = ' + x); //-10
</script>

1.2 自增、自减

x++、++x是表达式,跟变量x不同

<script>
    //n++:是原值
    //++n:是新值  
  
    var n1 = 10, n2 = 20;
    // n1++  ++n1 是表达式
    var n = n1++;   //n1=11  n=10
    console.log('n = ' + n);
    console.log('n1 = ' + n1);

    var n = ++n1;   //n1=12  n=12
    console.log('n = ' + n);
    console.log('n1 = ' + n1);

    var n = n2--;   //n2=19  n=20
    console.log('n = ' + n);
    console.log('n2 = ' + n2);

    var n = --n2;   //n2=18  n=18
    console.log('n = ' + n);
    console.log('n2 = ' + n2);
</script>

二、JavaScript 赋值运算符

向 JavaScript 变量赋值

赋值运算符 例子 等同于
= x=2 x=2
+= x+=2 x=x+2
-= x-=2 x=x-2
*= x*=2 x=x*2
/= x/=2 x=x/2
%= x%=2 x=x%2

三、JavaScript 关系运算符

关系运算符 描述
== 等于
=== 等值等型
!= 不相等
!== 不等值或不等型
> 大于
< 小于
>= 大于或等于
<= 小于或等于
? 三元运算符

3.1 == 和 === 的区别

var x = 'hellow'; //String
var y = new String('hellow'); //Object
console.log(x == y);      //true,由于值相等
console.log(x === y);     //false,由于数据类型不同

var z = new String('hellow'); //创建了一个Hellow的String对象     
console.log(z == y);      //false,因为y、z在栈内存中分别创建对象,是不同的对象,故为false

3.2 isNaN()

var a = NaN;
//NaN 与 NaN 的值不一定相等,所以一般为false
console.log( a == NaN ); //false

//一般判断一个值是否为NaN,使用isNaN()
console.log( isNaN(a) ); //true

3.3 字符串中关系运算符的比较

//任何值和NaN比较:false
console.log(NaN >= "1");  //false

/*
  比较两个字符串时,比较的是字符串的字符编码
  比较字符编码时是一位一位进行比较
  如果两位一样,则比较下一位
*/
//注意:在比较两个字符串型的数字时,一定要转型
console.log("11" < "5"); //true
console.log("abc" < "bcd"); //true

//比较中文时没有意义
console.log("戒" > "我"); //true

四、JavaScript 逻辑运算符

逻辑运算符 描述
!
&&
||
<script>
    /*
      ! 非
        - 若变量值为Boolean值
    */
    var x = false;
    console.log('!x = ' + !x); //true;

    console.log('!!x = ' + !!x); //false

    /*
      ! 非
        - 变量值:非Boolean值
            会先将其转为Boolean再进行判断
    */
    var y = "-2";
    console.log('!y = ' + !y); //false
    console.log('!!y = ' + !!y); //true;

    /*
      &&:两个为true才为true;有一个为false则为false
          - 对于非布尔值的情况
              会先将其转为Boolean,然后再运算,并且返回原值
          - &&与运算:
              - 如果第一值为true,则必然返回第二个值
              - 如果第一值为false,则直接返回第一个值   
      ||:有一个为true即为true
          - 非布尔值
            - 若第一个值为true,则直接返回第一个值   
            - 若第一个值为false,则返回第二个值  
    */  
   var a = "0" && NaN;
   console.log('"0" && NaN = ' + a); //NaN   

   var b = undefined && "0";
   console.log('undefined && "0" = ' + b); //undefined 

   var c = "0" || NaN;
   console.log('"0" || NaN = ' + c); //0   

   var d = undefined || NaN;
   console.log('undefined || NaN = ' + d); //NaN 
</script>

五、JavaScript 类型运算符

类型运算符 描述
typeof 返回变量的类型
instanceof 返回 true,如果对象是对象类型的实例

5.1 typeof

var a = new String();
console.log(typeof a);

5.2 instanceof

5.2.1 instanceof 比较内置类型

/*
  instanceof 左操作数是一个类,右操作数是标识对象的类  
  语法:
       对象                 函数
      object instanceof constructor  
*/
//比较自定义对象
function Foo() {}
function Bar() {}
Bar.prototype = new Foo();

new Bar() instanceof Bar; // true
new Bar() instanceof Foo; // true

// 如果仅仅设置 Bar.prototype 为函数 Foo 本身,而不是 Foo 构造函数的一个实例
Bar.prototype = Foo;
new Bar() instanceof Foo; // false

5.2.2 instanceof 比较内置类型

new String('foo') instanceof String; // true
new String('foo') instanceof Object; // true

'foo' instanceof String; // false
'foo' instanceof Object; // false

注:instanceof 操作符应该仅仅用来比较来自同一个 JavaScript 上下文的自定义对象。

六、JavaScript 位运算符

位运算符处理 32 位数
该运算中的任何数值运算数都会被转换为 32 位的数。结果会被转换回 JavaScript 数。

位运算符 描述 例子 等同于 结果 十进制
& 与(如果两位都是 1 ,则设置每位为 1) 5&1 0101 & 0001 0001 1
| 或(如果两位之一为 1 ,则设置每位为 1) 5|1 0101 | 0001 0101 5
~ 非(反转所有位) ~5 ~0101 1010 10
^ 异或(同位取0,异位为1) 5^1 0101 ^ 0001 0100 4
<< 零填充左位移(通过从右推入零向左位移,并使最左边的位脱落) 5<<1 0101 << 1 1010 10
>> 有符号右位移(通过从左推入最左位的拷贝来向右位移,并使最右边的位脱落) 5>>1 0101 >> 1 0010 2
>>> 零填充右位移(通过从左推入零来向右位移,并使最右边的位脱落) 5>>>1 0101 >>> 1 0010 2
原文地址:https://www.cnblogs.com/nadou/p/14030673.html