—– 什么是表达式
将同类型的数据(如常量,变量,函数等),用运算符号按一定的规则连接起来的,有意义的式子称为表达式。
运算符是一元、二元还是三元,要看它要求有几个数参加运算。
1.”++”运算符,只需要一个数据单元参加运算,如++a,它就是一元运算符。
2.”+”、”-“等运算符,如a+b,要求有两个数据单元参加运算,它就是二元运算符。
3.”?:”运算符要求三个运算单元,如(ab)?c:d,它就是三元运算符。
操作符:
分类 | 操作符 |
---|---|
算数操作符 | +、- 、* 、/ 、%(取余)、++、- - |
赋值操作符 | =(简单赋值)、+=、-=、*=、/=、%=、&=(逻辑与)、I=(逻辑或)、^=(异或) |
比较操作符(返回boolean型) | <、>、<=、>=、==(值相等)、===(值和数据类型相等)、!=(值不等)、!==(值和数据类型不等) |
三元操作符 | 条件?执行代码1:执行代码2—成立执行代码1,不成立执行代码2 |
逻辑操作符 | &&与、II 或、!非 |
算数操作符示例:
var num1=10,num2=20;
console.log(num1%num2); //10
var num3="c";
console.log(num1*num3); //NaN
var num4="5";
console.log(num1*num4); //50 浏览器自动做隐式类型转换
var num5=++num1+num2;
console.log(num1); //11 ++a先自增,再参与运算
console.log(num5); //31
var num6=num1++-num2;
console.log(num1); //12 a++ 先参与运算,再自增
console.log(num6); //-9
x1=20,x2=30,x3=--x1+x2--;
console.log(x1); //19
console.log(x2); //29
console.log(x3); //49 19+30
赋值操作符示例:
var a=10;
var b=20;
var c="2";
var str="hello ";
a+=5; // a=a+5
b%=4; // b=b%4;
sora1= b+c;
sora2= b*c;
str+=" world"; //str=str+"world";
//纯数字时是加号,有字符串时是拼接。
console.log(a); //15
console.log(b); //0
console.log(sora1); //02 此时b是0+"2"【字符串拼接】
console.log(sora2); //0 此时b是0*2【隐式转换】
console.log(str); //hello world
比较操作符示例:
var x=10,y="10",m=15;
z1=x==y; // 值是否相等
z2=x===y; // 值和类型是否相等
console.log(z1); //true ==只比较值是否相等
console.log(z2); //false ===比较值和类型是否相等
n1=y!=m;
n2=y!=x;
n3=y!==x;
console.log(n1); //true
console.log(n2); //false
console.log(n3); //true
console.log(null==undefined); //true;
console.log(null===undefined); //false;
三元操作符示例:
var soce=75;
var result=(soce>=60)?"及格":"不及格";
console.log(result); //及格
逻辑操作符示例:
&&与(只要一个条件不成立,返回false)
var num1=10,num2=20,num3=30,
str="welcome",
bool=true,
n=null,
m;
console.log(num1<num2 && num2<num3); //true
console.log(num1<num2 && num2==num3); //false
console.log(num1<num2 && bool); //true
console.log(num2<num3 && num3>num1 && false); //false
//操作数中有非布尔值的情况:
//注意:""和0和null和undefined隐式类型转换为false,其他为true
//1.如果操作数中隐式类型转换后均为true,则返回最后一个操作数。
//2.如果操作数中存在隐式类型转换后为false,则返回排在靠前的那个操作数。
//3.操作数是null,则返回null
//4.操作数是NaN,则返回NaN
//5.操作数是undefined,则返回undefined
console.log(str && num3); //30 第一条
console.log(80 && 55); //55 第一条
console.log("hello" && 65 && "abc"); //abc 第一条
console.log(0 && 88); //0 第二条
console.log("" && 0 && 30>20); //空 第二条
console.log(80 && "" && "abc"); //空 第二条
console.log(n && num3);
//null n=null,如果有一个操作数是null,则返回null 第三条
console.log(55 && true && 33*"abc");
//NaN 33*"abc"是NaN,如果有一个操作数是NaN,则返回NaN 第四条
console.log(m && true);
//undefined m是undefined,如果有一个操作数是undefined,则返回undefined 第五条
console.log(80 && 0 && n && "abc"); //0 第二条
console.log(80 && n && 0 && "abc"); //null 第二条
console.log(80 && 0 && 33*"abc" && "abc"); //0 第二条
console.log(80 && 33*"abc" && 0 && "abc"); //NaN 第二条
console.log(80 && 0 && m && "abc"); //0 第二条
console.log(80 && m && 0 && "abc"); //undefined 第二条
console.log(80 && 0 && m && 33*"abc" && n && "abc");//0 第二条
&&或(只要一个条件成立,返回true)
var m;
console.log(55>88 || 33<66); //true
console.log(55!="55" || 88==="88"); //false
//操作数中有非布尔值的情况:
//注意:""和0和null和undefined隐式类型转换为false,其他为true
//1.如果操作数中存在隐式类型转换后为true,则返回排在靠前的那个操作数。
//2.如果操作数中隐式类型转换后均为false,则返回最后一个操作数。
console.log("hello" || 0); //hello 第一条
console.log(99 || 0 || "abc"); //99 第一条
console.log("" || 88 || true); //88 第一条
console.log("" || 0 || "abc"); //abc 第一条
console.log(0 || "" || null); //null 第二条
console.log(0 || "" || null || "hello"); //hello 第一条
console.log(m || NaN || 99);
//99 m是undefined,NaN也是false 第一条
console.log("" || m); //undefined 第二条
console.log(30*"abc" || 55-"def");
//NaN 两个都是NaN,返回后一个 第二条
!非 【无论操作数是什么数据类型,逻辑非都会返回一个布尔值】
console.log(!false); // true
console.log(!88); // false
console.log(!0); // true
console.log(!"red"); // false
console.log(!NaN); // true
console.log(!null); // true
console.log(!!""); // false
//将第一个!得到的返回值true求反即为false
console.log(!!"blue"); // true 同上
如果有问题,请留言,谢谢。