JavaScript中的单个竖线是什么意思?

时间:2010-10-26 13:59:47

标签: javascript

这个表达在JS中意味着什么?

Value |= this.value

5 个答案:

答案 0 :(得分:23)

这将在this.value中的位与已存储在Value中的位之间执行bitwise OR,然后将结果存储回Value

var Value = 42;  // 00101010
Value |= 96;     // 01100000
window.alert(Value);  // 01101010 -> 106

答案 1 :(得分:14)

它是二进制“OR”,就像在C或C ++或Java中一样。在这种情况下,它在其赋值运算符形式中使用,所以

value |= this.value

表示this.valuevalue都转换为32位整数,并执行按位OR运算。如果value为10且this.value在操作之前为3(即二进制为01010011),则结果为11(二进制为01011 )。

Javascript中的二进制逻辑运算符在Javascript中值得注意,因为工作是在整数值上执行的。

术语“逐位”可能比“二进制”更准确。操作作用于数值的每个位,特别是强制转换为带符号的32位整数的数值。结果也是一个带符号的32位整数(根据规范)。

但是,“静止”的JavaScript编号始终是64位二进制浮点值。因此,虽然使用32位整数数学计算,但按位运算符的结果以浮点形式存储。这是有效的,因为32位整数的范围可以在64位浮点中舒适而精确地拟合。

答案 2 :(得分:12)

正如其他人所指出的,这是按位OR运算符。但是,我不认为人们在Javascript中对数值使用太多 - 通常 - 你没有在Javascript中做很多计算。为了更好地了解此运算符的用途,请考虑用户需要填写多个文本字段中至少一个的更常见的场景。

假设你有这个HTML:

<input type="text" class="phone-nr" id="home-phone-nr-1" />
<input type="text" class="phone-nr" id="home-phone-nr-2" />
<input type="text" class="phone-nr" id="home-phone-nr-3" />
<input type="text" class="phone-nr" id="mobile-phone-nr-1" />
<input type="text" class="phone-nr" id="mobile-phone-nr-2" />
<input type="text" class="phone-nr" id="mobile-phone-nr-3" />

用户可以选择填写多个电话号码,但必须提供至少一个。

最简单的方法(在这种情况下使用jQuery)是:

var valid = false;
$('.phone-nr').each(function(i, item){
  valid |= $(item).val();
}); // untested code
如果至少有一个类valid的输入字段具有非空值,则

phone-nr将为true。

如果每个字段必须填写(更常见的要求),您可以使用按位AND运算符执行此操作:

var valid = true;
$('.phone-nr').each(function(i, item){
  valid &= $(item).val();
}); // untested code
仅当所有输入字段都有值时,

valid才会为真。

如果至少需要填写单个字段,但不超过一个,则可以使用XOR运算符:

var valid = false;
$('.phone-nr').each(function(i, item){
  valid ^= $(item).val();
}); // untested code

在我看来,这些是Javascript中按位运算符的真实用法。

答案 3 :(得分:10)

我发现该运营商的一些实际用途:

( 3|0 ) === 3;             // целые числа не изменяет
( 3.3|0 ) === 3;           // у дробных чисел отбрасывает дробную часть
( 3.8|0 ) === 3;           // не округляет, а именно отбрасывает дробную часть
( -3.3|0 ) === -3;         // в том числе и у отрицательных дробных чисел
( -3.8|0 ) === -3;         // у которых Math.floor(-3.3) == Math.floor(-3.8) == -4
( "3"|0 ) === 3;           // строки с числами преобразуются к целым числам
( "3.8"|0 ) === 3;         // при этом опять же отбрасывается дробная часть
( "-3.8"|0 ) === -3;       // в том числе и у отрицательных дробных чисел
( NaN|0 ) === 0;           // NaN приводится к нулю
( Infinity|0 ) === 0;      // приведение к нулю происходит и с бесконечностью,
( -Infinity|0 ) === 0;     // и с минус бесконечностью,
( null|0 ) === 0;          // и с null,
( (void 0)|0 ) === 0;      // и с undefined,
( []|0 ) === 0;            // и с пустым массивом,
( [3]|0 ) === 3;           // но массив с одним числом приводится к числу,
( [-3.8]|0 ) === -3;       // в том числе с отбрасыванием дробной части,
( [" -3.8 "]|0 ) === -3;   // и в том числе с извлечением чисел из строк,
( [-3.8, 22]|0 ) === 0     // но массив с несколькими числами вновь зануляется
( {}|0 ) === 0;                // к нулю также приводится пустой объект
( {'2':'3'}|0 ) === 0;         // или не пустой
( (function(){})|0 ) === 0;    // к нулю также приводится пустая функция
( (function(){ return 3;})|0 ) === 0;

给我一​​些魔力:

3 | '0px' === 3;

答案 4 :(得分:3)

它是一个按位或赋值运算符,类似于+=。如果你对它进行测试:

<ol>
<script language="javascript">
var x=false;
document.writeln("<li>"+x+"</li>");
x|=true;
document.writeln("<li>"+x+"</li>");
x&=false;
document.writeln("<li>"+x+"</li>");
</script>
</ol>

你会得到这个输出(在IE中)

1.false
2.1
3.0

基本上,x|=y与说x=x|y

相同