Javascript 为什么控制台给我不同的输出,如果我改变了输入顺序如下

Javascript 为什么控制台给我不同的输出,如果我改变了输入顺序如下,javascript,Javascript,大家好,我现在介绍一下javascript概念。今天我遇到了一个 下面的问题:我试过下面的例子 在浏览器控制台或firebug中,当我输入1 | | true时 输出为1,当我输入true|1时,它给出输出true 为什么??请详细说明。是否由类型转换引起?>我仍然需要满意的答案 您正在检查or比较的第一个参数是否为真。在javascript中,或比较在参数为true时立即返回true 1是true,也是true,因此它将选择在这两种情况下传递的第一个参数 您看到的内容也被用作短路,因此您可以检

大家好,我现在介绍一下javascript概念。今天我遇到了一个 下面的问题:我试过下面的例子 在浏览器控制台或firebug中,当我输入
1 | | true
时 输出为1,当我输入
true|1
时,它给出输出
true

为什么??请详细说明。是否由类型转换引起?>我仍然需要满意的答案


您正在检查or比较的第一个参数是否为真。在javascript中,
比较在参数为true时立即返回true

1
true
,也是
true
,因此它将选择在这两种情况下传递的第一个参数

您看到的内容也被用作短路,因此您可以检查变量是否有值,如果没有,则在
|
之后使用“default”

例如,考虑以下内容:

var a;
console.log(a || 'notSet');
将记录
notSet
,因为
a
未定义且选择了“默认值”

短路评估为true,因此将记录true


另请参见检查or比较的第一个参数是否为真。在javascript中,
比较在参数为true时立即返回true

1
true
,也是
true
,因此它将选择在这两种情况下传递的第一个参数

您看到的内容也被用作短路,因此您可以检查变量是否有值,如果没有,则在
|
之后使用“default”

例如,考虑以下内容:

var a;
console.log(a || 'notSet');
将记录
notSet
,因为
a
未定义且选择了“默认值”

短路评估为true,因此将记录true


另请参见

两个
1
true
都是真实值。or运算符只是返回它遇到的第一个真实值。为了说明这一点,您可以尝试
false | 1
1
true
都是真实值。or运算符只是返回它遇到的第一个真实值。为了说明这一点,您可以尝试
false | | 1
。有趣的是,Chrome为您的示例记录了“static”。我不明白。Chrome版本:48.0.2564.103 m。不在我的Chrome中,您使用哪个版本?我使用的是49.0.2623.47 beta(64位),它会在Stack0verflow中记录“notSet”@Stack0verflow。所以,也许这是48版中的一个bug?我不确定,但它应该总是在Stack0verflow中记录“notSet”。nodejs也可以做到这一点。使用firefox 41.0b9有趣的是,Chrome为您的示例记录“静态”。我不明白。Chrome版本:48.0.2564.103 m。不在我的Chrome中,您使用哪个版本?我使用的是49.0.2623.47 beta(64位),它会在Stack0verflow中记录“notSet”@Stack0verflow。所以,也许这是48版中的一个bug?我不确定,但它应该总是在Stack0verflow中记录“notSet”。nodejs也可以做到这一点。使用firefox 41.0b9