JavaScript基础运算符
JavaScript基础运算符
几乎所有的编程语言都有各种各样的运算符(也被称之为操作符,operators)
运算符和运算元
运算元
运算元——运算符应用的对象。
✓ 比如说乘法运算5 * 2,有两个运算元;
✓ 左运算元5 和右运算元2;
✓ 有时候人们也称其为“参数”;
如果一个运算符对应的只有一个运算元,那么它是一元运算符.
✓ 比如说一元负号运算符(unary negation)-,它的作用是对数字进行正负转换;
◼ 一元运算符通常我们是使用–和+,-号使用的会较多一些;
如果一个运算符拥有两个运算元,那么它是二元运算符。
✓ 比如2 + 3
算数运算符
◼ 算术运算符
算术运算符用在数学表达式中, 它的使用方式和数学中也是一致的;
算术运算符是对数据进行计算的符号;
常见算数运算符
+ 加法
+ 连接字符串
- 减法
* 乘法
/ 除法
% 取余数 var result2 = 20 % 8 结果为余数 4
** 幂数(ES7) 2**3 结果为 8 取代之前的Math.pow(2,3)
赋值运算符
前面我们使用的= 其实也是一个运算符,被称之为赋值(assignments )运算符。
=:语句x = value 将值value 写入 x 然后返回x。
链式赋值(Chaining assignments
var num1 = num2 = num3 = 2+2;
链式赋值从右到左进行计算;
首先,对最右边的表达式2 + 2 求值,然后将其赋给左边的变量:num3、num2 和num1。
但是从代码的可读性的角度来说,不推荐这种写法。
原地修改(Modify-in-place)
我们经常需要对一个变量做运算,并将新的结果存储在同一个变量中.
例如:
var num = 100;
num = num + 10;
console.log(num)结果:110
可以使用运算符+= 和*= 来缩写这种表示。
var n = 10;
n += 5 -->n = n+5
n *= 5 -->n = n*5
所有算术和位运算符都有简短的“修改并赋值”运算符:/= 和-= 等。
自增和自减
对一个数进行加一、减一是最常见的数学运算符之一。
所以,对此有一些专门的运算符:
自增++将变量加1;
自减--将变量减1;
!!! 自增和自减只能应用于变量上不能应用在数字上;
++ 和 -- 的位置
var index = 5;
// 如果是独立使用时是没有区别的
++index;
console.log(index);
--index;
console.log(index);
// 自增和自减表达式本身又在其他表达式中,那就是有区别的
// ++在后面的时候被称为"后置形式":先使用变量再自增
var result1 = 100 + index++;
console.log(index);
console.log("result1:"+result1);
// ++再前面的时候被称为"前置形式":先自增再使用
var result2 = 100 + ++index ;
console.log(index);
console.log("result2:"+result2);
运算符优先级
MDN上给出了所有运算符的优先级:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Operator_Precedence
比较运算符
大于/ 小于:a > b,a < b。
大于等于/ 小于等于:a >= b,a <= b。
检查两个值的相等:a == b,请注意双等号== 表示相等性检查,而单等号a = b 表示赋值。
检查两个值不相等:不相等在数学中的符号是≠,但在JavaScript 中写成a != b
!!!比较运算符的结果都是Boolean类型的
=== 和 == 的区别
普通的相等性检查== 存在一个问题,它不能区分出0 和false,或者空字符串和false这类运算:
这是因为在比较不同类型的值时,处于判断符号== 两侧的值会先被转化为数字;
如果我们需要区分0 和false,该怎么办?
严格相等运算符 === 在进行比较时不会做任何的类型转换;
换句话说,如果a 和b 属于不同的数据类型,那么a === b 不会做任何的类型转换而立刻返回false;
同样的,“不相等”符号!= 类似,“严格不相等”表示为!==。
严格相等的运算符虽然写起来稍微长一些,但是它能够很清楚地显示代码意图,降低你犯错的可能性
== 的规则
如果类型相同
Underfined == Underfined -->true
Null == Null --->true
数字{
NaN == NaN --->false
数字==NaN --->false
1 == 2 -->fales
1 == 1 -->true
}
1 == null --->false
0 == null --->false
"" == null -->false
== 补充
// 让 123 == info返回的结果为true
var info = {
name : "why",
age : 18,
// []表示是一个计算属性名
[Symbol.toPrimitive](){
return 123;
}
}
console.log(123 == info) //true
三元运算符
◼ 有时我们需要根据一个条件去赋值一个变量。
比如比较数字大小的时候,获取较大的数字;
这个时候if else语句就会显得过于臃肿,有没有更加简洁的方法呢?
◼ 条件运算符:’?’
这个运算符通过问号?表示;
有时它被称为三元运算符,被称为“三元”是因为该运算符中有三个操作数(运算元);
实际上它是JavaScript 中唯一一个有这么多操作数的运算符;
◼ 使用格式如下:
var result = condition ? value1 : value2;
计算条件结果,如果结果为真,则返回value1,否则返回value2。
逻辑运算符
逻辑运算符,主要是由三个:
||(或),&&(与),!(非)
它可以将多个表达式或者值放到一起来获取到一个最终的结果;
运算规则
运算符 运算规则 范例 结果
&& 与: 同时为真 false && True false
|| 或: 一个为真 false or frue true
! 非: 取反 !false true
◼ 有了逻辑运算符,我们就可以在判断语句中编写多个条件。
逻辑或的本质
||(或)两个竖线符号表示“或”运算符(也称为短路或);
从左到右依次计算运算元。
处理每一个运算元时,都将其转化为布尔值(Boolean);
!!!如果结果是true,就停止计算,返回这个运算元的"初始值"。
如果所有的运算元都被计算过(也就是,转换结果都是false),则返回最后一个运算元。
◼ 注意:返回的值是运算元的初始形式,不会转换为Boolean类型
换句话说,一个或运算|| 的链,将返回第一个真值,如果不存在真值,就返回该链的最后一个值
逻辑与的本质
从左到右依次计算操作数。
在处理每一个操作数时,都将其转化为布尔值(Boolean);
!!!如果结果是false,就停止计算,并返回这个操作数的初始值(一般不需要获取到初始值);
如果所有的操作数都被计算过(例如都是真值),则返回最后一个操作数
换句话说,与运算返回第一个假值,如果没有假值就返回最后一个值
!逻辑非
<!-- 相同的效果 将变量转化为Boolean类型 -->
var message = "Hello Word"
console.log(Boolean(message))
// 补充用法1
console.log(!!message)
// 练习
var num1 = "";
console.log(!!num1)