之前分享了数据类型的转换和比较的时候的隐式转换,其实JavaScript还有非常多的运算符,常见的有算术、赋值、逗号、条件、比较等运算符或者是操作符,不常用的有delete、await、in等。
++、--:递增递减,在前面先自加再赋值,在后面先赋值再自加,都是转成number,不能转成number的都是NaN。
+、-(单个的一元运算+a):表示正负的运算,先转成number再转换。
+、-、*、/、%:加减乘除和求模()也叫求余,都是转成number再计算,除了字符串拼接。
Delete:用的不多,用来删除对象属性或者是数组元素,删除成功返回true,失败返回false。并不是所有属性都可删除,var声明的变量和function语句定义的函数也不能删除。
Void:void作用于任何表达式都会被执行,且都是返回undefined。作用就是通过采用void 0取undefined比采用字面上的undefined更靠谱更安全,因为我们是可以直接定义var undefined = 1,所以应该优先采用void 0这种方式。填充<a>的href和<image>的src可以确保不会跳转和发送请求。
Typeof和instanceof:这两个运算符之前分享过。
==、!=、===、!==:之前也分享过了,涉及了很多隐式转换。
&&、||:逻辑与逻辑非,都是短路运算符,只要一个不符合,后面的也不会继续执行。
>、<、>=、<=:也是比较用的,跟==一样的规则。
In:判断是否有属性或者数组元素下标
var obj = {a: 1};
console.log('a' in obj);//true
console.log('b' in obj);//false
var arr = [1];
console.log(0 in arr);//true
console.log(1 in arr);//false
!:逻辑非,所有的都会返回一个布尔值,把操作的数转成布尔值再求反,之前说过,js中的假值只有false、null、undefined、空字符、0和NaN,其它值转为布尔型都为true。
~ 按位非、& 按位与、| 按位或、^ 按位异或、<< 左移、>> 有符号的右移、>>> 无符号的右移这几个操作符,按照数学的方法去计算,如果是数学渣渣的话......
三目运算符、赋值运算符、逗号运算符:这三个也都不用说什么,就是逗号除了用于声明多个变量,还能用来赋值,从左到右取最后一个。
var a = (1, 2, 3);console.log(a);//3
这边其实只是把MDN上面表达式和运算符这边提取了一些基础常见的,还有很多表达式这边没有,里面还给了运算符的优先级,可以看看:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Operator_Precedence
其实大概常用的优先级我们都知道,前面几个还是觉得慢慢的去记忆会好一点,因为还是很重要的。不过代码阅读性是非常重要的,千万不要搞七搞八,最后分享一个网上看见的题,随便看看:
function Foo() {
getName = function () {
console.log('1');
};
return this;
}
Foo.getName = function () {
console.log('2');
};
Foo.prototype.getName = function () {
console.log('3');
};
var getName = function () {
console.log('4');
};
function getName() {
console.log(5);
}
Foo.getName();
getName();
Foo().getName();
getName();
new Foo.getName();
new Foo().getName();
new new Foo().getName();
(完)