布尔运算符 ||
Boolean operator ||
我最近不得不处理一些 javascript 并遇到了这段代码:
name: function(arg){
//...
var arg = arg || new Object();
//...
}
TBH,我不太适合 js,但据我所知,这意味着如果未定义 arg
,arg
将是 new Object();
我现在的问题是,js怎么知道这不是布尔解释呢?或者这种比较的效果如何?
就像,javascript 确实有动态数据类型,所以我假设 arg
是一个布尔值,(如果我没记错的话,[=15= 的布尔值] 始终为真) arg
在 运行 函数之后为真,无论 arg
的先前值是什么。
但是,我使用各种参数进行了测试(同样,我是 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 be new Object()
;
不完全:这意味着如果arg
有一个假值,那么将new Object()
分配给arg
。
||
运算符的工作原理如下:它计算左侧操作数,如果该值为 truthy,则运算结果为该值;否则,它计算右侧操作数并得出该值。
那么 "falsey" 和 "truthy" 是什么?虚假值是 undefined
、null
、0
、""
、NaN
,当然还有 false
。真实值是所有其他值。
更多内容在我的博客 this article 中。
&&
运算符同样强大,但方式有点相反:它计算左侧操作数,如果该值为 falsey,则操作就是那个值;否则它计算右边的操作数,结果就是那个值。所以 a = b && b.foo;
将分配 a
如果 b
的值是假的(null
、undefined
等)或 b.foo
的值如果没有。
My question now is, how does js know that this isn't considered a boolean interpretation?
因为规范中就是这样定义的。 JavaScript 的 ||
和 &&
与 Java 不同,后者总是产生布尔值。这是设计使然,非常强大。
我最近不得不处理一些 javascript 并遇到了这段代码:
name: function(arg){
//...
var arg = arg || new Object();
//...
}
TBH,我不太适合 js,但据我所知,这意味着如果未定义 arg
,arg
将是 new Object();
我现在的问题是,js怎么知道这不是布尔解释呢?或者这种比较的效果如何?
就像,javascript 确实有动态数据类型,所以我假设 arg
是一个布尔值,(如果我没记错的话,[=15= 的布尔值] 始终为真) arg
在 运行 函数之后为真,无论 arg
的先前值是什么。
但是,我使用各种参数进行了测试(同样,我是 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
有一个假值,那么将new Object()
分配给arg
。
||
运算符的工作原理如下:它计算左侧操作数,如果该值为 truthy,则运算结果为该值;否则,它计算右侧操作数并得出该值。
那么 "falsey" 和 "truthy" 是什么?虚假值是 undefined
、null
、0
、""
、NaN
,当然还有 false
。真实值是所有其他值。
更多内容在我的博客 this article 中。
&&
运算符同样强大,但方式有点相反:它计算左侧操作数,如果该值为 falsey,则操作就是那个值;否则它计算右边的操作数,结果就是那个值。所以 a = b && b.foo;
将分配 a
如果 b
的值是假的(null
、undefined
等)或 b.foo
的值如果没有。
My question now is, how does js know that this isn't considered a boolean interpretation?
因为规范中就是这样定义的。 JavaScript 的 ||
和 &&
与 Java 不同,后者总是产生布尔值。这是设计使然,非常强大。