如果在 JavaScript 中为 null 或未定义,则替换值

编辑: 我发现了问题的一半: 我不能对对象使用“ indexer”符号(my_object[0])。有办法绕过它吗?(我事先不知道过滤器属性的名称,也不想对它们进行迭代)。

251100 次浏览

为了使用 dl 函数,您需要为链接器使用-ldl 标志。

下面是 JavaScript 的对应代码:

var i = null;
var j = i || 10; //j is now 10

你在日食时是怎么做的?

请注意,逻辑运算符 ||不返回布尔值,而是可以转换为 没错的第一个值。

此外,使用对象数组代替单个对象:

var options = {
filters: [
{
name: 'firstName',
value: 'abc'
}
]
};
var filter  = options.filters[0] || '';  // is {name:'firstName', value:'abc'}
var filter2 = options.filters[1] || '';  // is ''

可以通过索引访问的。

工程项目—— > 物业—— > C/C + + 构建—— > 设定—— > GCC C + + 链接器—— > < br > 图书馆—— >

我发现了问题的一半: 我不能对对象(my _ object [0])使用“ indexer”符号。有办法绕过它吗?

不; 顾名思义,对象文字是 对象,而不是数组,所以不能简单地根据索引检索属性,因为它们的属性没有特定的顺序。检索它们的值的唯一方法是使用特定的名称:

var someVar = options.filters.firstName; //Returns 'abc'
在“ Library (- l)”框 按“ +”标志-> 写“ DL”(不带引号)-> 按 好吧-> 清洁及重建您的项目。

或者通过使用 for ... in循环迭代它们:

for(var p in options.filters) {
var someVar = options.filters[p]; //Returns the property being iterated
}
 $gcc -o program program.c -l <library_to_resolve_program.c's_unresolved_symbols>

无效合并运算符(? ?)是一个逻辑运算符

很好地描述了为什么-l dl 的位置很重要

返回其右侧操作数时,其左侧操作数为 Null 或未定义,否则返回其左侧操作数。

const options={
filters:{
firstName:'abc'
}
};
const filter = options.filters[0] ?? '';
const filter2 = options.filters[1] ?? '';

但是文件里也有一个非常简洁的解释

这将确保如果 filters[0]filters[1]nullundefined,那么这两个变量的回退值都是 ''

请注意,空结合运算符不会返回其他类型的虚假值(如 0'')的默认值。如果希望说明所有虚假值,则应使用 OR 操作符 ||

这不管用:

gcc -ldl dlopentest.c

但这个可以:

gcc dlopentest.c -ldl

解构方案

这确实是一个恼人的“功能”

问题的内容可能已经改变,所以我会尽量彻底地回答。

解构允许您从任何具有属性的内容中提取值。还可以在空/未定义和名称别名时定义默认值。

const options = {
filters : {
firstName : "abc"
}
}


const {filters: {firstName = "John", lastName = "Smith"}} = options


// firstName = "abc"
// lastName = "Smith"

注意: 资本化很重要

当我在编写 herdoc 语法时,我遇到了一些问题,找到了一些 有趣的事实:

$CC -ldl -x c -o app.exe - << EOF
#include <dlfcn.h>
#include <stdio.h>
int main(void)
{
if(dlopen("libc.so.6", RTLD_LAZY | RTLD_GLOBAL))
printf("libc.so.6 loading succeeded\n");
else
printf("libc.so.6 loading failed\n");
return 0;
}
EOF


./app.exe

如果使用数组,以下是操作方法。

以及所有这些:

  • $CC -ldl -x c -o app.exe - << EOF
  • $CC -x c -ldl -o app.exe - << EOF
  • 在这种情况下,将从数组中的每个对象提取 name,并给出它自己的别名。由于对象可能不存在,因此还添加了 = {}

    const options = {
    filters: [{
    name: "abc",
    value: "lots"
    }]
    }
    
    
    const {filters:[{name : filter1 = "John"} = {}, {name : filter2 = "Smith"} = {}]} = options
    
    
    // filter1 = "abc"
    // filter2 = "Smith"
    
  • $CC -x c -o app.exe -ldl - << EOF
  • $CC -x c -o app.exe - -ldl << EOF

更多详细教程

但是,对于 CC=gcc,只有最后一个变体有效; -ldl-之后(stdin 参数符号)。

浏览器支持 92% 2020年7月

星号: 检查 浏览器兼容性,如果您确实需要支持这些其他浏览器,请使用 Babel