Heim  >  Artikel  >  Backend-Entwicklung  >  PHP 或者 JavaScript 这些弱类型 的|| 和 | 的区别, 附代码;

PHP 或者 JavaScript 这些弱类型 的|| 和 | 的区别, 附代码;

WBOY
WBOYOriginal
2016-06-06 20:11:381161Durchsuche

下面是实验代码:用php 写的,JavaScript应该也差不多:

我发现,php 和 JavaScript 差多了! 我附加 运行结果 和 代码:

PHP 或者 JavaScript 这些弱类型 的|| 和 | 的区别, 附代码;

<code>
    
    <title>区别 | || or \& \& and</title>




<script>
    document.write( '以下是JavaScript:<br><br><div style="border:black solid 1px;width:450px">' );    
    document.write( '这里是var p = 6 | 0 , 结果,是【' );
    var p = 6 | 0;
    document.write( typeof(p) );
    document.write( '('+p );   
    document.write( ')】<br><br>' );

    document.write( '这里是var p = 6 || 0 , 结果,是【' );
    var p = 6 || 0;
    document.write( typeof(p) );
    document.write( '('+p );   
    document.write( ')】<br><br>' );

    document.write( '<br>' );


    document.write( '这里是var p = 6 & 0 , 结果,是【' );
    var p = 6 & 0;
    document.write( typeof(p) );
    document.write( '('+p );    
    document.write( ')】<br><br>' );


    document.write( '这里是var p = 6 && 0 , 结果,是【' );
    var p = 6 && 0;
    document.write( typeof(p) );
    document.write( '('+p );   
    document.write( ')】<br><br>' );

</script>
<?php echo  '以下是PHP:<br><br><div style="border:black solid 1px; width:450px">';
echo  '这里是$p = 6 or 0'.'结果,是【';
$p = 6 or 0;
var_dump($p);//int(6)
echo '】<br><br>';

echo  '这里是$p = 6 | 0'.'结果,是【';
$p = 6 | 0;
var_dump($p);
echo '】<br><br>';

echo  '这里是$p = 6 || 0'.'结果,是【';
$p = 6 || 0;
var_dump($p);//bool(true)
echo '】<br><br>';

echo  '<br><br>';


echo  '这里是$p = 6 and 0'.'结果,是【';
$p = 6 and 0;
var_dump($p);
echo '】<br><br>';


echo  '这里是$p = 6 & 0'.'结果,是【';
$p = 6 & 0;
var_dump($p);
echo '】<br><br>';


echo  '这里是$p = 6 && 0'.'结果,是【';
$p = 6 && 0;
var_dump($p);
echo '】<br><br>
</div>';
















</code>

这个刚开始学就稀里糊涂的,我搜了搜资料,也不明白,靠谱的结论是 = 优先级 大于 | , &,
我还是不明白...
其实 | 和 & 好理解,就是|| 和 && 不理解,还望大牛解答..

回复内容:

下面是实验代码:用php 写的,JavaScript应该也差不多:

我发现,php 和 JavaScript 差多了! 我附加 运行结果 和 代码:

PHP 或者 JavaScript 这些弱类型 的|| 和 | 的区别, 附代码;

<code>
    
    <title>区别 | || or \& \& and</title>




<script>
    document.write( '以下是JavaScript:<br><br><div style="border:black solid 1px;width:450px">' );    
    document.write( '这里是var p = 6 | 0 , 结果,是【' );
    var p = 6 | 0;
    document.write( typeof(p) );
    document.write( '('+p );   
    document.write( ')】<br><br>' );

    document.write( '这里是var p = 6 || 0 , 结果,是【' );
    var p = 6 || 0;
    document.write( typeof(p) );
    document.write( '('+p );   
    document.write( ')】<br><br>' );

    document.write( '<br>' );


    document.write( '这里是var p = 6 & 0 , 结果,是【' );
    var p = 6 & 0;
    document.write( typeof(p) );
    document.write( '('+p );    
    document.write( ')】<br><br>' );


    document.write( '这里是var p = 6 && 0 , 结果,是【' );
    var p = 6 && 0;
    document.write( typeof(p) );
    document.write( '('+p );   
    document.write( ')】<br><br>' );

</script>
<?php echo  '以下是PHP:<br><br><div style="border:black solid 1px; width:450px">';
echo  '这里是$p = 6 or 0'.'结果,是【';
$p = 6 or 0;
var_dump($p);//int(6)
echo '】<br><br>';

echo  '这里是$p = 6 | 0'.'结果,是【';
$p = 6 | 0;
var_dump($p);
echo '】<br><br>';

echo  '这里是$p = 6 || 0'.'结果,是【';
$p = 6 || 0;
var_dump($p);//bool(true)
echo '】<br><br>';

echo  '<br><br>';


echo  '这里是$p = 6 and 0'.'结果,是【';
$p = 6 and 0;
var_dump($p);
echo '】<br><br>';


echo  '这里是$p = 6 & 0'.'结果,是【';
$p = 6 & 0;
var_dump($p);
echo '】<br><br>';


echo  '这里是$p = 6 && 0'.'结果,是【';
$p = 6 && 0;
var_dump($p);
echo '】<br><br>
</div>';
















</code>

这个刚开始学就稀里糊涂的,我搜了搜资料,也不明白,靠谱的结论是 = 优先级 大于 | , &,
我还是不明白...
其实 | 和 & 好理解,就是|| 和 && 不理解,还望大牛解答..

题主修改题目,增加了js的内容,我也补充下js相关的答案:
js的位运算(|&)和php类似,不详述。主要说明下逻辑运算的不同。

很多编程语言(包括js,但不包括php)基于性能考虑,对逻辑运算有个优化

对And运算 a = b && c, a的值为:如果b逻辑上为真,返回c; 否则返回b
对Or运算 a = b || c, a的值为: 如果b逻辑上为真,返回b; 否则返回c
给几个例子

<code class="js">a = 1 && 2;         // 1
a = null && 2;      // null
a = 'str' || 2;     // 'str'
a = undefined || 2; // 2</code>

其实使用下面的例子可以更直观表现

<code class="js">function c() {
    console.log('这里不会调用');
}
a = null && c();  // a 为 null</code>

因为&&前面为假,所以直接返回null,后面的函数c()不会被调用。

(原理我就不细说了,知道是性能优化就够了。如果你是计算机专业出身,上理论课时候肯定讲过,只不过当时可能没认真听。)


以下是针对PHP的原答案
正好有时间,我就细说下。

首先 and or && || 都是逻辑运算符,功能完全相同,唯一区别只有优先级: && || > 赋值运算符(=) > and or;

你的测试代码里有个不太明显的坑。
因为优先级:|| > = > or, 所以

<code class="php">$p = 6 or 0;</code>

实际上的运算顺序是

<code class="php">($p = 6) or 0;  // $p 为 6</code>

如果改成

<code class="php">$p = (6 or 0);  // $p 为 true</code>

就和使用||一致了。

2、而 & | 是位运算符,和上面的不是一种运算。
位运算符是将数字的每一位相应进行逻辑运算得出的结果,比如

<code class="php">$b = (10 | 12);  // $b 为 14</code>

10(二进制为1010)和12(二进制1100)位与运算,得到14(二进制1110)

在JS中|| ,&& 用的蛮多的

位运算的逻辑运算是不同的,希望再去看点书。|和&是位运算,|| 和&&是逻辑运算

绝大部份语言都有&&和||符号吧,意义几本都一样,都是作为逻辑符,你这么问,我都感觉你没学过编程...

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn