先来看看这道题。。。
下边代码输出的结果是( )
var val = ‘smtg’;
console.log('Value is ’ + (val === ‘smtg’) ? ‘Something’ : ‘Nothing’);
A: Value is Something
B: Value is Nothing
C: NaN
D: other
相信很多同学第一反应都会选A吧,但是答案是D。为什么呢?这就需要考虑到JavaScript运算符的优先级了。
因为连接符的优先级高于三元运算符,所以该题目相当于:'Value is ' + true ? 'Something' : 'Nothing'
,返回的结果应该是Something。
如果我们想先进行三目运算,需要用圆括号把它括起来:'Value is ' + (val === 'smtg' ? 'Something' : 'Nothing')
,这时候返回的结果就是:Value is Something。
再来看一道题。。。
var i=100
i++;
var j=i++;
var y=++j;
console.log(y,i,j)
这道题考的是一元运算符++前置和后置时的执行顺序,简单来说,后置的++,先使用,再自加;前置的++,先自加,再使用。
题目中执行var j=i++;
时,i++已经执行过一次,所以 i=101, j=101,执行完毕后再执行 i++,此时 i=102。
执行var y=++j;
时,先进行++运算,此时 j=102,赋值给 y,因此这道题的答案为:102,102,102。
想要了解更多运算符的优先级,可以查阅官网–>Web开发技术>>运算符优先级,这里就不做总结了。如果有同学对JavaScript中的操作运算符不熟悉,可以看我之前的文章–>JavaScript学习笔记(三)–操作运算符,希望可以帮助到你!