JavaScript学习笔记(六)【运算符】

在这里插入图片描述

算数运算符

  • 运算符可以对一个或多个值进行运算,并获取结果

  • typeof 就是运算符,获得一个值的类型,它会将给值的类型以字符串的形式返回

var a = 123;
var result = typeof a;
console.log(typeof result);//输出string;

算数运算符:

  • 非Number运算,会先转换成Number再运算(true->1,null->0)
  • 任何值和NaN做运算,结果都是NaN
  • 两个字符串做加法,则会做拼接
  • 任何值和字符串做加法,先转成字符串然后相加(拼接),利用这个特点,只需将任意数据类型+一个""即可将其转换为String,这是一种隐式类型转换,由浏览器自动完成,实际上也是调用了String()
  • 除了加法,其余运算都会先转换成Number
+-*/% 模(余数)

较长字符串,可以用加号换行拼接:

var str="锄禾日当午,"+
        "汗滴禾下土,"+
   			"谁知盘中餐,"+ 
    		"粒粒皆辛苦";

一元运算符

之前讲的是二元运算符,

  • 正号不变
  • 负号取反
  • 对非Number值,先转成Number,可以对一个其他的数据类型使用+,转换成Number
var a = 123;
a = +a;//正号不变
a = -a;//取反

自增和自减

  • 自增可以使变量在自身的基础上增加1

  • 变量自增以后,原变量的值会立即自增1

  • 自增两种:后++(a++)和前++(++a),无论是a++,还是++a,都会立即使原变量的值自增1,不同的是a++ 和++a的值不同:

  • a++的值等于原变量的值(自增前的值);++a的值等于原变量的新值(自增后的值)

var a = 1;
a++//自增1

var c = 10;
//第一次c++,是在10的基础上自增
c++;
//第二次c++,是在11的基础上自增
c++;
console.log(c++);//12

var d = 20;
console.log(++d);//21
console.log(++d);//22

var d = 20;
var result = d++ + ++d + d;//64
// 20 + 22 + 22
  • 自减两种:后–(a–)和前–(a–),都会立即使原变量的值自减1,不同的是a–和--a的值不同
  • a–是原变量的值;–a的值是原变量的新值
var n1 = 10, n2 = 20;
var n = n1++;//n1 = 11 n1++ = 10
console.log('n='+n);//10
console.log('n1='+n1);//11

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

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

n = --n2;//n2 = 18 --n2 = 18
console.log('n='+n);//18
console.log('n2='+n2);//18
//一定要搞清楚原值是多少,在谁的基础上运算

逻辑运算符

三种逻辑运算符:

! 非 取反操作 //true->false false->true
&&||
var a = true;
a = !a;
console.log(a)//false;

var b = 10;
b = !b;
console.log("b="+b);//b=false
console.log(typeof b);//boolean

!非:

  • 对一个值两次取反,不会变化
  • 对非布尔值运算,则会将其先转换为布尔值,然后取反,可以为一个任意数据类型取两次反,将其转换为布尔值类型

&& 与:

  • 两个值只要有一个为false,就会返回false
  • 短路“与”:只要第一个值false,不会检查第二个值
var result=true&&true;
console.log(result)//true

var result=true&&false;//false
var result=false&&true;//false
var result=false&&false;//false

||或:

  • 两个值只要有一个true,就返回true
  • 两个值都为false,才返回false
var result=true&&true;
console.log(result)//true

var result=true&&false;//true
var result=false&&true;//true
var result=false&&false;//false

非布尔值的逻辑运算

与运算:

  • 非布尔值的运算,会先转换为布尔值,然后再运算,并且返回原值(即不回返回 true或者 false)
  • 如果两个值都为true,返回后边的数
  • 如果两个值有false,返回靠前的false
  • 以上规则符合断路情况
  • 如果第一个值为 true,则返回第二个值
  • 如果第一个值为false,则返回第一个值
  • 与运算找false
var result=1 && 2;
console.log(result);//2(第二个值)

var result=0 && 2;
console.log(result);//0

var result=NaN && 0;
console.log(result);//NaN(第一个值)

与此相反:

或运算:

  • 如果第一个值为true,则直接返回第一个值
  • 如果第一个值为false,则直接返回第二个值
  • 或运算找true

赋值运算符

=:

  • 可以将等号右侧的值赋值给左侧的变量

+=:

-=:

*=:

/=:

%=:

a=a+5;
a+=5;//两者等价

关系运算符

  • 通过关系运算符比较两个值的大小关系
  • 成立返回true
  • 不成立返回false
>;
<;
>=;
<=;
var result=5>10;
console.log(result);//false

非数值情况:

  • 非数值比较,先转换成数字再比较
  • 任何值和NaN比较,都是false
  • 符号两侧都是字符串,不会将其转化为数字,分别比较字符Unicode字符编码
  • 比较字符编码是一位一位进行比较;两位相同,则比较下一位,所以借用这个对英文排序,比较中文没有意义
  • 如果比较两个字符串型数字,可能得到不可预测的结果,注意比较两个字符串的数字,一定要转型
console.log(1>=true);//false
console.log(1>"0");//true
console.log(10>null);//true
console.log(10>"hello");//true
console.log(true>false);//true 1>0
console.log("11"<"5");//true 都是字符串,比较Unicode编码
console.log("abc"<"b")//true

Unicode编码表

网页中使用Unicode编码,&#编码;编码需要十进制

<h1 style="font-size":200px;>&#9760</h1>
<!--要转换为十进制>
console.log("\u2620");//骷髅头☠️

相等运算符

  • 比较两个值是否相等;相等返回true,不相等返回false
  • 当使用==比较两个值,值类型同,会自动类型转换
  • Undefined 衍生自null,所以这两个值做相等判断时,会返回
  • 可以通过 isNaN()函数,判断一个值是否是NaN, 是返回true,不是返回false
  • != 来做不相等运算
  • var a = 123;
    a = Boolean(a);
    console.log(typeof(a));//输出 true
  • === 全等,不做类型转换
  • !==不全等
console.log(1==1);//true

var a==10;
console.log(a==4);//false

console.log("1"==1);//true

console.log(true=="1");//true

console.log(null==0);//false

console.log(undefined==null);
console.log(NaN==NaN);//NaN 不和任何值相等,包括他本身

var b=NaN;
console.log(isNaN(b));//true

console.log(10!=5);//true
console.log(10!=10);//false
console.log("123"===123)//false

console.log(1!==1);//true

条件运算符(三元运算符)

?:

条件表达式:?语句1:语句2
  • 条件运算符在执行时,首先对条件表达式进行求值:如果位true,执行语句1;如果为false,执行语句2
  • 有返回值
  • 条件运算是非布尔值,先转换
true?alert("语句1"):alert("语句2");

a>b?alert("a大"):alert("b大")//获取a b中最大值
var max=a>b?a:b;
console.log(max);//谁大返回谁
//获取 a b c 中最大值
var max>c?max:c;
//嵌套比较
var max=a>b?(a>c?a:c):(b>c?b:c);
console.log(max);//写法不推荐,不易阅读

运算符优先级

  • , 运算符,可以分割多个语句,声明多个变量时使用
var a=1, b=2, c=3;
alert(b);
  • 和数学一样,JS也有运算优先级
  • 如果遇到优先级不确定,用()
var result=1 || 2 && 3;
console.log(result);//1
  • 语句按照从上倒下一条一条执行,JS可以用{}来分组,同一个{}中的语句,为一组,要么执行要么不执行,一个{}叫做一个代码块
  • 代码块内部的在外部可见
  • 代码块后面不用写;
{
  var a=10
  alert("hello")
  console.log("你好")
  document.write("语句")
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值