题目
var val = ‘c’;
var str = ‘Value is’ + (val === ‘c’) ? ‘a’:’b’;
console.log(str);
控制台的打印结果是什么?
答案:a
‘Value is’ + (val === ‘c’) ? ‘a’:’b’
小括号的优先级最高,先计算小括号里的(val === ‘c’),val 与’c’ 都是String类型,并且值相同,所以返回true。
==’Value is’ +true ? ‘a’:’b’
算数运算符“+”的优先级大于条件运算符“?:”的优先级;运算符“+”当有一个操作数是字符串(或可以转为字符串的对象)时总会把另一个操作数也隐式地转为字符串类型然后进行字符串拼接。
==’Value istrue’? ‘a’:’b’
条件运算符“?:”会把’Value istrue’ 转为布尔值true。
==true? ‘a’:’b’
==‘a’
当当当当~下边还有~~~
dvdf
补充整理JavaScript运算符优先级、结合性以及操作数类型的知识。
JavaScript中的大多数运算符都是由标点符号表示的,比如“+”和“=”。而另外一些运算符则是由关键字表示的,比如delete和instanceof。关键字运算符和标点符号所表示的运算符一样都是正规的运算符。
下表简单列出了JavaScript中的运算符:
JavaScript运算符表
表说明
按照运算符的优先级排序,前面的运算符优先级高于后面的运算符优先级;
被水平分割线分隔开来的运算符具有不同的优先级;
标题为A的列表示运算符的结合性,L(从左至右)或R(从右至左);
标题为N的列表示操作数的个数;
标题为“类型”的列表示期望的操作数类型,以及运算符的结果类型(在“→”符号之后)。
运算符优先级
运算符优先级控制着运算符的执行顺序。优先级高的运算符(表格的顶部)的执行总是先于优先级低(表格的底部)的运算符。
运算符的优先级可以通过显式使用圆括号来重写。
运算符的结合性
在表中标题为A的列说明了运算符的结合性。L指从左至右结合,R指从右至左结合。结合性指定了在多个具有同样优先级的运算符表达式中的运算顺序。从左至右是指运算的执行是按照由左到右的顺序进行。
一元操作符、赋值和三元条件运算符都具有从右至左的结合性。
操作数类型
一些运算符可以作用于任何数据类型,但仍然希望它们的操作数是指定类型的数据,并且大多数运算符返回(或计算出)一个特定类型的值。在表标题为“类型”的列中列出了运算符操作数的类型(箭头前)和运算结果的类型(箭头后)。
JavaScript运算符通常会根据需要对操作数进行类型转换,比如对于希望第一个操作数是布尔类型的条件运算符(?:)来说,这个操作数可以是任意类型,但是运算符会把它隐式转换为布尔类型。
始发于微信公众号: 前端麻辣烫