一元、二元和三元运算符
一、一元运算符
一元运算符只需要一个操作数,比如 typeof,单目+和-,或者自增自减
1. typeof
typeof 可以检查一个值的类型,不会影响原值,将结果返回,结果是字符串类型
代码如下(示例):
var a = 123;
var result = typeof a;
console.log("result = " + result);//result = number
console.log(typeof result);//string
2. in
in 运算符可以检查一个对象中是否含有指定的属性,有返回true,没有返回false
语法:“属性名” in 对象
var obj = new Object();
obj.name = "孙悟空";
console.log("name" in obj);//true
3. 单目+和-
单目 + 对数字不会有任何影响
单目 - 对一个数字的符号取反
代码如下(示例):
var a = 123;
a = +a;
console.log("a = " + a);//仍是123
var a = 123;
var a = -a;
console.log("a = " + a);//变成-123
注意:对应非数字的值,会先把该值转换成Number,然后再操作
代码如下(示例):
var a = "123";//字符串123
var a = -a;
console.log("a = " + a);//-123
console.log(typeof a);//number
4. 自增自减
自增使原变量加1,自减使原变量减1
注意:虽然自增自减后,原变量的值会加1或减1,但是a++ 和 ++a、a-- 和 --a 的值是不一样的,需要区分清楚
- a++的结果等于原变量的值
- ++a的结果等于原变量加1的值
- a–的结果等于原变量的值
- –a的结果等于原变量减1的值
代码如下(示例):
var a = 123;
var b = a++;
console.log("a = " + a);//a = 124
console.log("b = " + b);//b = 123等于原变量的值
var a = 123;
var b = a--;
console.log("a = " + a);//a = 122
console.log("b = " + b);//b = 123等于原变量的值
二、二元运算符(仅讨论算术运算符 + - * / %)
二元运算符需要两个操作数
- 非Number类型的值做运算时,会先转成Number再运算
- 任何值和NaN做运算,结果都是NaN
1.加法
注意:任意数据类型和字符串做加法运算,都会先自动转换成字符串,再做级联(concatenate)处理(字符串相加称为级联)
代码如下(示例):
var a = "123" + 1;
console.log("a = " + a);//a = 1231
2.减法、乘法、除法和取模
减法、乘法、除法和取模运算都会先将非Number的值转成Number,再做运算
三、三元运算符
三元运算符需要三个操作数
语法:条件表达式 ?语句1 : 语句2
执行流程:
先对条件表达式求值,如果值为true,则执行语句1,并返回执行结果;如果值为false,则执行语句2,并返回执行结果
小练习:求用户输入的三个整数中的最大值
//创建三个变量,分别接收用户输入的三个整数
var num1 = prompt("请输入第一个整数:");
var num2 = prompt("请输入第二个整数:");
var num3 = prompt("请输入第三个整数:");
//第一个值和第二个值对比,返回较大的值
var max = num1 > num2 ? num1 : num2;
//较大的值再和第三个值对比,返回最大值
max = max > num3 ? max : num3;
console.log("max = " + max);//max为最大值
注意:如果条件表达式的值是非布尔值,则其会自动转换成布尔值,再判断
代码如下(示例):
//"hello"是字符串,转成true再判断
var str = "hello" ? "hello" : "你好";
console.log(str);//hello
总结
一元运算符需要一个操作数;二元运算符需要两个操作数,三元运算符需要三个操作数;自增自减的运算结果和原值之间的关系;字符串做加法运算会做级联处理;三元运算符的执行流程