开始之前看一个例子:let result = 'b' + 'a' + + 'a' + 'a';
一元运算符
一元运算符只有一个参数,即要操作的对象或值。
1.void
含义:void 是 JavaScript 中的关键字,该操作符指定要计算一个表达式但是不返回值,即对表达式运算后返回undefined;
let a=1;
let b=2;
let b= void a;
应用场景:想要执行一段代码,但不需要任何结果。如想点击链接定位失效的时候
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<style>
.a{ height: 500px }
.b{
display: inline-block;
height: 50px;
width: 50px;
background-color: red;
}
</style>
</head>
<body>
<div class="a"></div>
<div class="a"></div>
<div class="a"></div>
<div class="a"></div>
<div class="a"></div>
<a class="b" href="javascript:void(0);"></a>
<!--<a class="b" href="#"></a>-->
</body>
</html>
2.delete
含义:delete可以删除对象属性和数组元素,能够返回 true 或 false。当被 delete 的对象的属性存在并且拥有 DontDelete (对象属性的一个内部属性,拥有该内部属性表明该属性不能被删除) 时返回 false,否则返回 true。需要注意的是,对象属性不存在时也返回 true,所以返回值并非完全等同于删除成功与否。
let obj = {};
Object.defineProperty(obj,'a',{value:1,configurable:true});
Object.defineProperty(obj,'b',{value:1,configurable:false});
delete obj.a;
delete obj.b;
delete obj.c;
值得注意的是:delete只能删除自有属性且内部属性表明该属性能被删除,即原型链上的属性是不会删除的
3.一元前后增减运算符
含义:一元加减法本质上对数字无任何影响,但会把字符串强制转换成数字;但是对不能转换成数字的字符串会返回NaN。
let sNum = "20";
console(-sNum, +sNum, typeof +sNum);
let s=+'a';
位运算符(算术运算符)
含义:位运算符是在数字底层(即表示数字的 32 个数位)进行操作的;
位非 :用‘~’表示,对数进行二进制否运算
(实际运算机制太复杂,有兴趣可自行考究下( ̄▽ ̄)",其实实质上是对数字求负,然后减 1)。
位与 :用‘&’表示,对两个数进行二进制的与运算。
位非:用符号‘|’表示,对两个数进行二进制的或运算。
异或 :用符号(^)表示,对二进制形式进行异或运算。XOR 不同于 OR,当只有一个数位存放的是 1 时,它才返回 1。
左移: <<,在不溢出的情况下对数操作相当于每移一位乘以2;因为位运算比乘法运算更快,建议在恰当时候使用;
右移:>>
逻辑运算符
含义:逻辑运算符有三种:NOT(!)、AND(&&) 和 OR(||);
NOT:即对逻辑判断的结果取反;
AND:逻辑 与运算的运算数可以是任何类型的,不止是 Boolean 值。
特性:
1、逻辑 AND 运算是简便运算,即如果第一个运算数决定了结果,就不再计算第二个运算数。
2、 如果某个运算数不是原始的 Boolean 型值,逻辑 AND 运算并不一定返回布尔值;一个运算数是对象,另一个是 Boolean 值,返回该对象;
两个运算数都是对象,返回第二个对象;
某个运算数是 null,返回 null。
某个运算数是 NaN,返回 NaN。
某个运算数是 undefined,返回undefined。
console.log(true && undefined);
console.log(true && null);
console.log(false && undefined, true && NaN, true && new Number(101), new Number(102) && new Number(103));
OR:逻辑或运算的运算数可以是任何类型的,不止是 Boolean 值。
特性:
1、逻辑OR 运算也是简便运算,即如果第一个运算数为真,就不再计算第二个运算数。
2、 如果某个运算数不是原始的 Boolean 型值,逻辑OR运算也并不一定返回布尔值;一个运算数是对象,并且该对象左边的运算数值均为 false,则返回该对象;
如果两个运算数都是对象,返回第一个对象;
最后一个运算数是 null,并且其他运算数值均为 false,则返回 null。
最后一个运算数是 NaN,并且其他运算数值均为 false,则返回 NaN。
最后一个运算数是 undefined,并且其他运算数值均为 false,则返回undefined。
console.log(true || undefined);
console.log(true || null);
console.log(false || undefined, true || NaN, true || new Number(101), new Number(102) || new Number(103));
特别地,利用‘||’和’&&‘可以简化有关判断的代码,不必先判断再赋值。所以当一个变量需要先通过判断才能赋值的时候,用‘||’,且是把优先的对象放到前面,而用‘&&’的情况是,把权重最高的判断的对象放到前面
关系运算符
含义:关系运算符执行的是比较运算。每个关系运算符都返回一个布尔值
特性:
1、比较数字和字符串无论何时比较一个数字和一个字符串,都会把字符串转换成数字,然后按照数字顺序比较它们。但如果字符串不能转换成有意义的数字。返回的是 NaN,所以根据规则,任何包含 NaN 的关系运算符都要返回 false。
2、字符串与字符串比较
第一个字符串中每个字符的代码都与会第二个字符串中对应位置的字符的代码进行数值比较。其中大写字母的代码都小于小写字母的代码 。其实就是转换成相应的ASCII码进行比较。
console.log("Blue" < "alpha", "Blue".toLowerCase() < "alpha".toLowerCase());
console.log(parseInt("25a"), "25" > 3, "25a" < 3, "25a" > 3, "a" > 3, "a" < 3);