JS操作符

一元操作符

一元操作符:只操作一个变量的符号

一、自增和自减操作符

就是让变量自己加1或减1,

<script>
            var a=20;
			++a;//让a的值加1
            //等价于a = a+1
			console.log(a) //21
			
			var b=20;
			b++;//让b的值加1
            //等价于 b = b+1
			console.log(b) //21
</script>

区别:

<script>
			
			var c=10
			console.log(c++) //10
			console.log(c)//取c变量中保存的值并打印 11
			
			console.log(++c) //11
			console.log(c)//取c变量中保存的值并打印 11
</script>

前置++ 就是先把变量修改了 再取值操作;

后置++ 就是先取变量的值 然后在加1操作;

无论前置还是后置 既有存值操作也有取值操作;

取值和存值 就是把一个变量保存的数据取出来 把一个计算结果存入变量;

一个变量只能保存一个数据;

<script>
      // 练习:

			var a = 2;
			var b = 3;
			var c = (++a) + (b++) + b + (a++) - a;//3+3+4+3-4
			console.log(c)//9
</script>

补充:++ 的优先级大于+

--操作与++操作一样

二、逻辑操作符

1、逻辑与 &&

             var re=A&&B

            A是一个表达式  B也是一个表达式  re等于A表达式或者B表达式

            (如果A表达式判定为布尔表达式的值的false)re就是A 否则反之为B表达式

            如果re为A表达式 那么B表达式不运行

练习:

           <script>
             var a=(b=0)&&(c=30)
			//b=0==>var b=0
			console.log(a)//a=b=0 并不是a=false
			console.log(b)
			console.log(c)
			//ps:
			//0做布尔判定时会判定为flase  
			//取一个变量的数据时(1.没有声明就会报错 2.取的是最近一次保存的数据) 
			//js中变量保存数据(1.已经有就更新  2.没有就隐藏声明)
			

               //结果为 0 0 报错
            </script>

2、逻辑或(||)

        和逻辑与操作符相似,逻辑或操作符也是短路操作符。即,当第一个数的求值结果为true时,就不会对第二个操作数求值了。

      如果有一个操作数不是布尔值,逻辑或也不一定返回布尔值;此时,它遵循下列规则:  

  • 如果第一个操作数是对象,则返回第一个操作数;

  • 如果第一个操作数的求值结果为 false,则返回第二个操作数;

  • 如果两个操作数都是对象(或非0数),则返回第一个操作数;

  • 如果两个操作数都是 null,则返回 null;

  • 如果两个操作数都是 NaN,则返回 NaN;

  • 如果两个操作数都是 undefined,则返回 undefined

练习:

<script>
     var re=(a=100)||(b=0);
		 console.log(re) //100
		 console.log(b) //报错

</script>

注意:                

        || 这个符号在开发中 往往是优化的代码最常用的js符号

         例如:var xhr=new XMLHttpRequest()||new ActiveXObject('Micorsoft.XMLHTTP')解决兼容性问题。

3、逻辑非(!)

        可以应用于 ECMAScript 中的任何值。无论这个值是什么数据类型,这个操作符都会返回一个布尔值。逻辑非操作符首先会将它的操作数转换为一个布尔值,然后再对其求反。

        例子:

<script>
		   var a="isLogin"//判断是否登录过
		   a=!a//  !a 把a的值取出来 然后转化为布尔值true  在取反    在把取反的结果赋值给变量
		   console.log(a)
</script>

        经常用于开关思想,

        开关思想:把一个变量中保存一个布尔值 然后在业务执行时 修改这个变量的值:为取反  然后通过变量的值执行分支业务。例如:

<script>
 var flag=true
 function fn(){
	 flag=!flag
	 if(flag){
			   			   
		   }else{
			   			   
			   }
	 }
		    fn()
</script>

   三、关系操作符

        运算符  ==> 底层cpu会去计算 会执行操作 得到一个结果

1、比较运算符

小于(<),(大于)>,(大于等于)>=,(小于等于)<=,他们用于两个数的比较,返回的值是一个布尔值。

当两个数存在非数值性时,会进行相应的转换,规则如下:

  • 如果两个操作数都是字符串,则比较两个字符串对应的字符编码值

  • 如果一个操作数是数值,则将另一个操作数转换为一个数值,然后执行数值比较。

  • 如果一个操作数是对象,则调用这个对象的 valueOf()方法,用得到的结果按照前面的规则执行比较。如果对象没有 valueOf()方法,则调用 toString()方法,并用得到的结果根据前面的规则执行比较。

  • 如果一个操作数是布尔值,则先将其转换为数值,然后再执行比较。

  • 任何操作数与 NaN 进行关系比较,结果都是 false

2、相等运算符

        相等(==)、不相等(!=)、全相等(===)、不全等(!==)

        ==比较比较两个数的值是否相等,相等返回true;!=,不相等返回true。

        当两个操作数类型不同时,会先转换操作数(强制转换),转换规则如下:   

  • 如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值——false 转换为 0,而true 转换为 1;

  • 如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转换为数值;

  • 如果一个操作数是对象,另一个操作数不是,则调用对象的 valueOf()方法,用得到的基本类型值按照前面的规则进行比较;

        注意:

  • null 和 undefined 是相等的。

  • 要比较相等性之前,不能将 null 和 undefined 转换成其他任何值(null == 0为false)。

  • 如果有一个操作数是 NaN,则相等操作符返回 false,而不相等操作符返回 true。重要提示:即使两个操作数都是 NaN,相等操作符也返回 false;因为按照规则, NaN 不等于 NaN。NaN!=r任何

记忆:

练习:

<script>

console.log("100"==100)//值相等,返回true 但是类型不相等 number string
console.log("100"===100) //返回false

//当比较对象时:
	        var obj={name:"karen"}
			var obj2={name:"karen"}
			console.log(obj==obj2)//返回false  引用数据比较时会看是否是同一个内存空间

			//难点和很多企业的笔试题中最喜欢在选择题中考==的比较表(背)
			var arr=[1,2,3,2]//arr.tostring()==> "1,2,3,2"
			var b=""
			console.log(arr==b) //false

			var arr=[[]]//这个内存空间
			var arr2=[]//这个另外一个内存空间
			console.log(arr==arr2) //fasle


			var a=2
			var b="2"
			console.log(a!=b) //false  ==的结果取反 
</script>

===和!==,只在两个操作数未经转换就相等的情况下返回 true。

注意:null == undefined 会返回 true,因为它们是规定;但 null === undefined 会返回 false,因为它们是不同类型的值。

2、in运算符

主要用于检查对象中是否有某成员。

<script>
	对象在js中是一种键值对的集合:  key:value  key是字符串  value是数据/表达式 
			var obj={"name":"karen",age:24}
			var re="name" in obj 
			console.log(re) //返回true
			var obj={age:28}
			console.log("toString" in obj) //返回true,在对象中包含自带的toString方法
			var re=obj.toString() 
			console.log(re)//[object object]

</script>

3、instanceof运算符

检查左侧的对象是否是右侧类的实例,如果是返回true;

四、条件操作符(三目运算符)

        expr1?A:B  //expr1表达式会做布尔判定 判定的结果为true 就会执行表达式A 否则执行B  

            //整个三目运算表达式的结果  是A 或者B

<script>
	var a=20;
	var re=a<=18?20:{name:"karen"};
	console.log(re) //返回{name: 'karen'}

		function render(){
		return isLogin?<User/>:</Login> //用于判断是否登录
		 }
			
</script>

五、赋值操作符

赋值操作符(=),就是把右侧的值赋给左侧的变量,不能是表达式,例如: a+b=c //错误

复合赋值操作符:

  • 乘/赋值(*=); //例如a*=10 等价于a = a*10

  • 除/赋值(/=);

  • 模/赋值(%=);

  • 加/赋值(+=);

  • 减/赋值(-=);


六、逗号操作符

逗号运算符  多元运算符

使用逗号操作符可以在一条语句中执行多个操作。

<script>
var re=A,B,C,D,E,F //会把逗号隔开的表达式全部执行 最后一个运行的表达式的结果就是逗号运算符的结果
console.log(re) //返回F
</script>

可以声明多个变量。

<script>
var a,b,c,e=20;
//隐式操作  :
var a;var b;var c;var e=20
</script>

七、表达式计算

eval()可以解释运行由JavaScript源代码组成的字符串,并产生一个值。

eval()只有一个参数。如果传入的参数不是字符串,它直接返回这个参数。如果参数是字符串,它会把字符串当成JavaScript代码进行编译,如果编译失败者抛出一个语法错误异常。如果编译成功,则开始执行这一段代码,并返回字符串中的最后一个表达式会或语句的值,如果最后一个表达式或语句没有值,则最终返回undefifined。如果字符串抛出一个异常,这个异常将把该调用传递给eval()。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值