javascript - boolean 运算符 ||

标签 javascript syntax boolean

我最近不得不处理一些 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 be new Object();

不完全是:这意味着如果 arg 具有 falsey 值,则将 new Object() 分配给 arg.

|| 运算符的工作原理如下:它计算左侧操作数,如果该值为 truthy,则运算结果就是该值;否则,它会计算右侧操作数并得出该值。

那么什么是“假”和“真”呢? Falsey 值为 undefinednull0""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/

相关文章:

C - 参数列表和函数体之间的代码

python - 为什么模块名称中的连字符会产生语法错误?

c++ - `(void)varName;` 是做什么的?

javascript - 只返回传递 boolean 值的对象?

python - True < 2 是如何实现的?

c - 为什么 sizeof(a ? true : false, a) 运算符打印一个字节?

javascript - 在 DOM 字符串中使用变量

javascript - grunt 模板 jasmine istanbul 没有生成覆盖率报告

javascript - Rails,webpacker : where/when to use the import statement in classes, 以及在 pack/application.js 中要求的目的是什么?

javascript - 正则表达式获取字符和空格之间的字符串并排除第一个分隔符