JS的运算符详解

JavaScript运算符

一,算数运算符

算术运算符:+,-,*,/,%,分别是加减乘除取模(取余数)

在js 中,等于号是一种赋值的结果,是赋值运算,会将等号右边的结果赋值给等号左边
用一个var定义多个变量,使用逗号分隔
例:var b var a=b=a+3 则先把赋值之后的结果返回给a,再赋值给b
所以任何一个运算符都会先将结果返回出来给原本的声明要素,再赋值给后面的结果
(在配合循环时,还有个隐式转换,会将返回出来结果自动转换成布尔值,然后计入循环中)
等号左侧,不允许出现表达式,运算符只能放在右侧

小数计算时,为了保证数值的精确,通常会先相应的10的次幂换算成整数,然后在÷相应的10的次幂,用parseInt(科学计算法运算),浏览器就能精确得出我们想要的
所以,因为小数点后的运算不精确,可以考虑使用parseint((原值x
10保留的数位次幂)运算符(原值y*10保留数位的幂))
取模运算时要记住,余数永远小于除数

加 减 乘 除 取模

var a=3;
//等号是赋值,会将等号右边的结果赋值给等号左边
var a=3,b=4,c=5;
//用一个var定义多个变量,使用逗号分隔
//var a,b,c;
a=b=a+3;//a+3的结果先赋值给a,再把a+3结果赋值给b
var x=3;
console.log(x=x+3);//任何一个运算符都会先将结果返回后赋值。

等号左侧不允许出现运算符,等号右侧才可以.
由于小数点后运算的不精确性,可以考虑使用
parseInt((原值x * 10保留的数位幂) 运算符 (原值 * 10保留数位幂)) / 10保留数位幂

 console.log(parseInt((0.12346e+5)+(0.24563e+5))/(1e+5));
 console.log(parseInt((0.3e+5)-(0.1e+5))/(1e+5));

非数值运算

1.如果运算符是加法,需要特殊处理,除加法以外的算术运算符,将符号两端的内容隐式转换为数值运算

console.log("5"-"2");//console.log(Number("5")-Number("2"));
console.log(null-true); -1
console.log(undefined-true);NaN

2.非数值加法运算

3.加法运算符左右两端含有字符串,会将另一端隐式转换为字符型,并且字符首尾相连拼接

console.log(true+"a");
var age=20; console.log("今年"+age+"岁");

4.如果加法两端没有字符串,会隐式转换成数值型在计算

console.log(true+null);
console.log(0+"a");
console.log(true-(0+"a"));//NaN

二,赋值运算符

console.log(a+=5);
a表示覆盖变量   +=运算符      5是步长
var a=5;
// a+="";//快速将数值转换为字符串的方法

移位运算中先将数值转换为二进制,后面添加几个0就是左移几位,再转换为十进制

四,位运算符

中文   中文简体字符集  大五码(台湾繁体字) unicode(万国码)  utf-8
GBK5   GB2312      BIG5          unicode       utf-8
位运算符 专门计算二进制的运算符
// 先把数值转换为二进制,然后按位相与
// 1&1=1
// 1&0=0
// 0&1=0
// 0&0=0

// 1011  11
// 1010  10

// 1010  10
// 1001  9   

// 1000  8
// 0111  7

// 0000
        // 任意一个数值,转换为二进制后,求出1的个数
        // 11111
        // var s=31;
        // var n=1;
        // while(s=s&(s-1)){
        //     n++;
        // }
        // console.log(n);
// 或运算 |

// 1|1=1
// 1|0=1
// 0|1=1
// 0|0=0

// 异或运算 相同为0,不同为1
// 1^1=0
// 1^0=1
// 0^1=1
// 0^0=0
加密
// 钥匙
// 5638^1234
// console.log(563810^1234); //564912
// console.log(564912^1234);//563810
// 位非 加1取负

五,一元运算符

 var s=1;
console.log(s=s+1);//2
console.log(s++);//1 先把s返回,然后再+1然后重新赋值给s
console.log(++s);//2 先+1然后返回,再赋值给s
如果单独写s–或者–s,并不需要将运算的结果返回,不管使用s–还是使用–s,s的结果都相同
s–; --s;

小练习

var x=5;
//6 + 6+  7 +  8  +   9  +9 + 10=55
//6+  6+    7   +8   +9   +9 +10
var y=++x + x++ + x++ + x++ +x +x++ +x;//求出他的值

 var x=5;
 console.log(x++*2);//10   x++的返回值*2
 console.log(++x*2);//12
var x=5;
x+=++x;
console.log(x);//11

遇到一元运算符时,分清楚返回的结果和运算的变量值

//小练习
x+="";
 x++;//  遇到一元运算符,优先将变量转换为数值型
 console.log(x)

字符串快速转换为数值型

var x=5;
console.log(+x);

六,关系运算

< > <= >= == === != !== 返回的结果是布尔值

=== 判断等号两边的对象是否全等,包括值和类型, NaN无法判断,NaN===NaN false

console.log({x:1}==={x:1});//false  所有的对象都是引用关系,引用关系创建的对象表面相同,地址不同

== 仅判断等号两端结果是否相等,如果类型不相同,先隐式转换后在比较

console.log("3"==3);//转数值
console.log(1==true);//数值
console.log(undefined==false);//false
console.log(undefined==null);//只有null和undefined相等,其它都不等

console.log(0==false); console.log(""==false); console.log(""==0);
            
console.log([]==[]);//false  引用型
console.log([]=="");//数组和其它符号比较时,先转换成字符串,[]转换为空字符串
console.log([]==0); console.log([]==false); console.log([]==![]); //true

        // 0,false,"",NaN,null,undefined 转换为布尔值 false
		//var a;
        if(a==false){
            //a=>0 "" false []
        }
        if(a===false){ //a=>false
        }
        if(!a){
            //a=>"" 0 NaN undefined false null
            //遇见非转换布尔值
        }
        if(a==undefined){
            //a=>null undefined
        }

isNaN()

var str = NaN;
console.log(isNaN(str));
console.trace(Number.isNaN(str));
//window.isNaN 隐式转换数值型后再判断是不是NaN
//Nubmer.isNaN 仅判断数值类型,不做隐式转换,如果是非数值,则默认判断结果都是false

isNaN 是不是非数值  true就是非数值,false是数值
自动隐式转换为数值,然后再判断是否是非数值
// console.log(isNaN("a"));//true
// console.log(isNaN(3));//false;
// console.log(isNaN("3"));//false
// console.log(isNaN(true));//false
// console.log(isNaN(""));//false
// console.log(isNaN(" "));//false
// console.log(isNaN(NaN));//true

//只有是数值类型才用Number.isNaN判断
//isNaN 相当于双等号,判断是不是非数值,先隐式转换为数值型在判断
//Number.isNaN 类似于三等,判断内容是不是数值类型,如果不是直接返回false,只有NaN返回为true

七,逻辑运算符

		/* 逻辑运算 */
        &&返回值不反悔布尔值
       A(true) && B(true) =B(true)
       A(false) && B(true) =A(false)
       A(true) && B(false) =B(false)
       A(false) && B(false) =A(false)
        
	  var x=60;
         console.log(x && x+1);     //61
        var x=-10;
        console.log(x-10 && x+10);      //0
        var x;
        if((x=2) && (x=0)){
            console.log(x);
         }

         ||  熔断
       A(true) || B(true) =A(true)
       A(true) || B(false) =A(true)
       A(false) || B(true) =B(true)
       A(false) || B(false) =B(false)
       console.log(null || 5); console.log(null || 0);
        
        console.log(null || 5);        //5
        console.log(null || 0);             //0
         
         熔断赋值
         var x=5;  x=x || 3;
         var x=1;
         x= --x || x++;    //  0
         x= --x || ++x;     //   1
         // 在使用逻辑与和逻辑或时,判断时通常都是转换为布尔值判断,
         // 但是并没有将原值转换,返回的还是原值,不是布尔值

		! 取反 先隐式转换为布尔值,然后取反

八,三元运算符 条件运算符 三目运算符

写法 条件?结果1:结果2 条件1ttrue则返回结果1否则结果2

注意:如果结果1和结果2都是布尔值时,不要使用三目运算符,直接返回条件

三目运算符最大的缺点,优先级非常低(赋值更低,所以当出现赋值运算符时,先运算三目运算符)

例如: var a=5 var b=a>0?3:2;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值