运算元 —— 运算符应用的对象。比如说乘法运算 5 * 2,有两个运算元:左运算元 5 和右运算元 2。有时候人们也称其为“参数”而不是“运算元”。
如果一个运算符对应的只有一个运算元,那么它是 一元运算符。比如说一元负号运算(unary negation)-,它的作用是对数字进行正负转换
如果一个运算符拥有两个运算元,那么它是 二元运算符。
加法 +,
减法 -,
乘法 *,
除法 /,
取余 %,
求幂 **.
取余 %
a % b 的结果是 a 整除 b 的 余数
alert( 5 % 2 ); // 1,5 除以 2 的余数
alert( 8 % 3 ); // 2,8 除以 3 的余数
求幂 **.
alert( 2 ** 2 ); // 2² = 4
alert( 4 ** (1/2) ); // 2(1/2 次方)
1 任意一个运算元是字符串,那么另一个运算元也将被转化为字符串(二元 +)。
alert( '1' + 2 ); // "12"
alert(2 + 2 + '1' ); // "41",不是 "221"
alert('1' + 2 + 2); // "122",不是 "14"
二元 + 是唯一一个以这种方式支持字符串的运算符。
其他算术运算符只对数字起作用,并且总是将其运算元转换为数字。
如:
alert( 6 - '2' ); // 4,将 '2' 转换为数字
alert( '6' / '2' ); // 3,将两个运算元都转换为数字
2 一元运算符(+)
一元运算符加号,或者说,加号 + 应用于单个值,对数字没有任何作用。但是如果运算元不是数字,加号 + 则会将其转化为数字。
// 对数字无效 let x = 1; alert( +x ); // 1
let y = -2; alert( +y ); // -2
// 转化非数字 alert( +true ); // 1 alert( +"" ); // 0
我们经常会有将字符串转化为数字的需求。比如,如果我们正在从 HTML 表单中取值,通常得到的都是字符串。如果我们想对它们求和,该怎么办?
二元运算符加号会把它们合并成字符串:
let apples = "2";
let oranges = "3";
alert( apples + oranges ); // "23",二元运算符加号合并字符串
如果我们想把它们当做数字对待,我们需要转化它们,然后再求和
let apples = "2";
let oranges = "3"; // 在二元运算符加号起作用之前,所有的值都被转化为了数字
alert( +apples + +oranges ); // 5
// 更长的写法 //
alert( Number(apples) + Number(oranges) ); // 5
但要记住一元运算符优先级高于二元运算符
let n = 2; n *= 3 + 5; alert( n ); // 16 (右边部分先被计算,等同于 n *= 8)
3逗号运算符(非重点)
逗号运算符能让我们处理多个语句,使用 , 将它们分开。每个语句都运行了,但是只有最后的语句的结果会被返回。
举个例子:
let a = (1 + 2, 3 + 4);
alert( a ); // 7(3 + 4 的结果)
这里,第一个语句 1 + 2 运行了,但是它的结果被丢弃了。随后计算 3 + 4,并且该计算结果被返回。
逗号运算符的优先级非常低
请注意逗号运算符的优先级非常低,比 = 还要低,因此上面你的例子中圆括号非常重要。
如果没有圆括号:a = 1 + 2, 3 + 4 会先执行 +,将数值相加得到 a = 3, 7,然后赋值运算符 =执行 a = 3,然后逗号之后的数值 7 不会再执行,它被忽略掉了。相当于 (a = 1 + 2), 3 + 4。
null + 1 = 1 //
undefined + 1 = NaN //
" \t \n" - 2 = -2 // (7)
null 经过数字转换之后会变为 0。
undefined 经过数字转换之后会变为 NaN。
字符串转换为数字时,会忽略字符串的首尾处的空格字符。在这里,整个字符串由空格字符组成,包括 \t、\n 以及它们之间的“常规”空格。因此,类似于空字符串,所以会变为 0。
本文介绍了JavaScript中的一元和二元运算符,重点讲解了加法运算符在不同类型运算元间的转换规则,以及一元加号如何用于非数字值的转换。示例展示了如何正确进行数字运算,避免字符串合并。此外,还提及了逗号运算符的作用和优先级。
789

被折叠的 条评论
为什么被折叠?



