typeof 3
得到'number'
typeof 3 + 4
这里有两个运算符,需要比较下优先级了,
typeof的大,所有先运行typeof 3,得到'number',
'number'再同4作用,得到'number 4' 。
x = y + c + b
左结合,一般逻辑顺序,从左向右执行。
x = y = c = b
右结合,从右向左执行。
3 + 4 || false
先比较两个运算符优先级,+胜,所以得7,
再进行运算,左边是真,右边是假,得7。
3 + ( 4 || false)
先运行括号里的,前真后假,得4,最后是3与4的和。
3 + ( 4 && false)
同理,括号里的值是false,3 + false会先把false数值化,
类型转变嘛,值是多少?是0。所以,答案是3。
3 + 4 && false
先加法,得到7,然后运行与运算,
一真一假,所以是false。
a = 3 + 4 || false
等号是最低的当然,除了逗号。就是a等于后面的值。
typeof 2 * 3
先typeof 2 得 'number',然后得到NaN。
NaN是数值类型,但是没有值,所以它自己
不等于它自己。
typeof ( 2 * 3)
先得6,再得到number。
typeof 2 + 3
先typeof 2得'number',然后得'number 3'。
var a = 0 ,b = 0;
a +++ b
先不管结果如何,先看运算符,
三个加号可以看成一个自增和加号,
自增的优先级肯定高,先自增,
关键是自增给哪个?
是递增在变量的前面的
还是在它后面的优先?查MDN得
到后置递增的更优先,所以a++优先于++b。
a = b == c
等同于a = ( b == c)。
!2*0
先!2,得false,再相乘,false数值化为0,最后得0。
逻辑非优先级很高,逻辑与和逻辑或却很低。
短路的练习——
1 && 3
要的是布尔逻辑值对比,输出的则是对应的value值。
1和3都是真,最终选第二个值,3嘛。
如果第一个真,第二个假,选第一个值。
如果第一个为假,那就是第一个值,不管第二个了。
1 && 'foo' || 0
逻辑或中,如果第一个是真,后面不管了。
从左往右运行,1为真,'foo'为真,
与运行选'foo',然后再运行或。'foo'为真,
后面不用看了。
1 || 'foo' && 0
1虽然为真,但是与的优先级更高,先运行与运算,一真一假取假。
然后再运行或,1为真后面不用管了。
引伸——此时,不是短路了哦!
0 || false
如果两个都是假呢?输出第二个值。
0 || 'foo'
第一个假,第二个真呢?输出真的。
这个好理解,毕竟是或。
为什么?我觉得因为逻辑与中,
都是真就是第二个值,否则就是第一个值。
而逻辑或中,第一个真就是真,否则就是第二个值,
正好对立了,记住就行了。
练习的补充
其实从运算本身上,可以模糊地体会到优先级的判定的逻辑的,首先某个对象,如果想单单作用这个对象的话,就是想把这个对象的属性变了,而它还是挂着那个变量或者表达式的外衣的,它就是个作用目标,作用在它身上,所以这个时候对它属性的改变的优先级最高的,如果低于其他的运算符了,它会先运算,然后形成新的变量或者表达式,到时候,改变属性的作用目标就不是我们想要的了哦。这就是第一梯队的那些自增之类的运算符了。所以,逻辑反比逻辑或,逻辑与高很多了。
然后目标本身属性算是内在的,目标必须要不改变的情况下先完成自身内部的运算符作用。
自身搞定之后,其实这时候,我是划分成目标区块和其他区块的,而其他区块跟目标区块再作用的话,优先级的作用想法就是,先想好自己想要的目标区块,如何通过现有的目标区块得到?
只要是作用后可以改变元目标本身属性的,比如加减,都是比较高的。越后面的,越是简简单单地逻辑上的判断,最后输出的也是没变化的值。具体的顺序,可以查看《运算符优先级》。
一些特殊的关系值
Number ( false )
0
Number ('')
0
Number (' ')
0
NaN == NaN
false
0 == false
true
null == true
false
null == false
false
undefined ==true
false
undefined == false
false
NaN == false
false
NaN == true
false
'' == false
true
' ' == true
false
' ' == false
true
网友评论