美文网首页
运算符优先级小练习

运算符优先级小练习

作者: 流着万条永远的河 | 来源:发表于2017-08-26 19:39 被阅读0次
    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
    
    
    
    

    相关文章

      网友评论

          本文标题:运算符优先级小练习

          本文链接:https://www.haomeiwen.com/subject/vqcvdxtx.html