44.运算符和运算符的优先级

您所在的位置:网站首页 运算符中优先级最高的运算符为 44.运算符和运算符的优先级

44.运算符和运算符的优先级

2024-07-06 17:21| 来源: 网络整理| 查看: 265

算术运算符

算术运算符中最常见的是加法运算符,但是加法运算符针对不同类型的变量,组合效果有很多种。简而言之,JS中的加法运算符可以实现数字的相加,也可以实现字符串的拼接。

// ————数字相加———— console.log(1 + 1); // 2 console.log(true + true); // 2 console.log(1 + true); // 2 console.log(false - 1); // -1 // ————字符串拼接———— console.log('1'+'1'); // '11' console.log('1.1' + ' ' + '1.1'); // '1.1 1.1'

加法的计算方法一般如下:

1.1.1.1.如果运算元素是对象,那么会先转化为原始类型的值(即valueOf方法),如果其结果还不是原始类型的值,再调用toString方法

var obj = {name: 'Lyndon', age: 22}; console.log('1' + obj); // '1[object Object]' var obj = { name: 'Lyndon', toString: function toString(){ return 'Lyndon'; }, valueOf: function valueOf(){ return 'morning' } }; console.log(1 + obj); // '1morning' var obj = { name: 'Lyndon', toString: function toString(){ return 'Lyndon'; } }; console.log(1 + obj); // '1Lyndon'

2.2.2.2.如果对象是Date实例,那么先执行的是toString方法

var day = new Date(); console.log(day); // 'Sat Dec 31 2016 19:19:11 GMT+0800 (中国标准时间)' console.log('good' + day); // 'goodSat Dec 31 2016 19:19:11 GMT+0800 (中国标准时间)'

3.3.3.3.两个运算元素都是原始类型值,但只要有一个运算元素是字符串,那么另一个运算元素也会转换为字符串,执行字符串拼接

var a = 10, b = 'days'; console.log(a + b); // '10days'

4.4.4.4.只有加号和一个运算元素,如果唯一的运算元素是字符串,那么会转换为数字,所以结果有可能是NaN

console.log(+ '78'); // 78 console.log(+ 'good'); // 'NaN'

5.5.5.5.否则,两个运算元素皆转换为数值,执行算术加法运算

由于加法运算极大地依赖于参数的类型,因此使用时应该首先明确到底要执行哪种运算,如果不确定最好加上小括号。如下面的例子就说明字符串在算式中的位置不同,结果也会不同。

console.log('3' + 4 + 5); // '345' console.log(3 + 4 + '5'); // '75' console.log(3 + '4' + 5); // '345'

相较加法运算符而言,剩下的算术运算符都相对简单些,其原则就是:将所有的运算元素全部转换为数值,再执行相应的算术运算。

'1'/2; // 0.5 'a'/2; // NaN '1a'/2; // NaN,转换为数字的方式是Number('1a'),而不是parseInt('1a') var a = 1, b = 1; a1 = a++; b1 = ++b; console.log(a1, b1, a, b); // 1 2 2 2 void运算符

void运算符的作用是:执行表达式,然后只返回undefined,由于void的优先级比较高,因此使用时最好加上小括号

console.log(void 1 + 2); // NaN,等同于:undefined + 2 console.log(void(1 + 2)); // undefined 逗号运算符

逗号运算符的作用是对两个表达式求值,然后返回后一个表达式的值。

1, 10; // 10 var x = 1; var y = 10; var z = (x, y); z; // 10 运算符优先级与结合性

优先级什么意思大家都清楚,结合性是指多个具有同样优先级的运算符表达式中的运算顺序。有的运算符是左结合的,即运算从左到右执行,下面两个运算是一样的

w = x + y + z; w = (x + y) + z;

有的运算符是右结合的

w = x = y = z; w = (x = (y = z)); w = a: b: c ? d : e? f : g; w = a? b : (c? d: (e? f : g));

运算符的优先级《JavaScript权威指南》中有个表阐述的很好(我去掉了位运算部分),其中R/L代表结合性是右结合还是左结合,num->num表示操作符期望的数据类型和计算结果类型,lval指左值

运算符操作结合性类型++自增Rlval->num--自减Rlval->num-求反Rnum->num+(一个操作数)转换为数字Rnum->num~按位求反Rint->int!逻辑非Rbool->booldelete删除属性Rlval->booltypeof检测数据类型Rany->strvoid返回undefinedRany->undefined *、/、%乘、除、求余Lnum,num->num +、-加、减Lnum,num->num+字符串拼接Lstr,str->str=数字大小或字母表顺序Lnum/str,num/str->boolinstanceof对象类型Lobj,function->boolin测试属性是否存在Lstr,obj->bool ==判断相等Lany,any->bool!=判断不等Lany,any->bool===判断恒等Lany,any->bool!==判断非恒等Lany,any->bool &&逻辑与Lany,any->any||逻辑或Lany,any->any?:条件运算符Rbool,any,any->any=赋值 *=、/=、+=、-=赋值 运算且赋值Rlval,any->any,忽略第一个操作数,返回第二个操作数Lany,any->any


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3