我最近不得不处理一些 javascript 并遇到了以下代码:
name: function(arg){
//...
var arg = arg || new Object();
//...
}
TBH,我不太适合js,但据我所知,这意味着 if arg
未定义,arg
将是new Object();
我现在的问题是,js 如何知道这不被视为 boolean 解释?或者说这种比较的效果如何?
就像,javascript 确实有动态数据类型,所以我会假设 if arg
是一个 boolean 值,(如果我没记错的话, new Object();
的 boolean 值始终为 true) arg
无论 arg
的先前值如何,运行该函数后均为 true曾是。
然而,我使用各种参数进行了测试(再说一遍,我对 js 很陌生),结果对我来说很奇怪:
使用:
function name(arg) {
var arg = arg || new Object();
return arg;
}
结果:
name() = [object Object]
name(1) = 1
name(true) = true
name(false) = [object Object]
name('true') = true
name('false') = false
name(null) = [object Object]
除了 name(false) = [object Object]
之外,我本来期望得到这些结果。造成这样结果的原因是什么?我实在找不到满意的答案。
问候, 西蒙
最佳答案
...this means that if
arg
is not defined,arg
will benew Object()
;
不完全是:这意味着如果 arg
具有 falsey 值,则将 new Object()
分配给 arg
.
||
运算符的工作原理如下:它计算左侧操作数,如果该值为 truthy,则运算结果就是该值;否则,它会计算右侧操作数并得出该值。
那么什么是“假”和“真”呢? Falsey 值为 undefined
、null
、0
、""
、NaN
和当然,假
。真实的值(value)观是所有其他的。
更多内容请参见 this article在我的博客上。
&&
运算符同样强大,只是以某种相反的方式:它计算左侧操作数,如果该值为 falsey,则运算结果为该值;否则,它计算右侧操作数,结果就是该值。因此,如果 a = b && b.foo;
为 false (null
, 未定义
等)或b.foo
的值(如果没有)。
My question now is, how does js know that this isn't considered a boolean interpretation?
因为规范中就是这样定义的。 JavaScript 的 ||
和 &&
与 Java 不同,后者总是生成 boolean 值。它是经过设计的,而且非常强大。
关于javascript - boolean 运算符 ||,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28876872/