Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript速记或操作_Javascript - Fatal编程技术网

Javascript速记或操作

Javascript速记或操作,javascript,Javascript,我觉得这一定是一个副本,但我一直找不到任何东西,可能是因为不同的措辞,或者只是因为真的没有更好的 我正在生成一大块JS代码,其中“ORs”对象属性带有变量,而标识符不一定匹配。看起来是这样的(值是布尔值): 为了让它更瘦,我试了一些 a.st1 |= st; 但是它使a.st1成为整数而不是布尔值,我不想再添加一行带双反的内容来将其重新键入布尔值 使用直觉,我还尝试了| |=,但没有帮助:) 有没有更好(更短)的方法来编写这些命令 注意:我不能使用循环来处理命令,因为命令不是一次执行完的,而是

我觉得这一定是一个副本,但我一直找不到任何东西,可能是因为不同的措辞,或者只是因为真的没有更好的

我正在生成一大块JS代码,其中“ORs”对象属性带有变量,而标识符不一定匹配。看起来是这样的(值是布尔值):

为了让它更瘦,我试了一些

a.st1 |= st;
但是它使
a.st1
成为整数而不是布尔值,我不想再添加一行带双反的内容来将其重新键入布尔值

使用直觉,我还尝试了
| |=
,但没有帮助:)

有没有更好(更短)的方法来编写这些命令


注意:我不能使用循环来处理命令,因为命令不是一次执行完的,而是在代码的其余部分分散成小块(为了简单起见省略了这些块)。

不,javascript中没有速记或运算符。但是,它确实提供了
|124;=
?=
支持

有没有更好(更短)的方法来编写这些命令

在您的例子中,您正在修改
a
对象,而不是指定给变量。您可以以循环方式执行此操作:

function amendWith(target, source)
    for (var p in source)
        if (!target[p])
            target[p] = source[p];
    return target;
}


不,javascript中没有速记或运算符。但是,它确实提供了
|124;=
?=
支持

有没有更好(更短)的方法来编写这些命令

在您的例子中,您正在修改
a
对象,而不是指定给变量。您可以以循环方式执行此操作:

function amendWith(target, source)
    for (var p in source)
        if (!target[p])
            target[p] = source[p];
    return target;
}


我不确定这是否更短,但作为一种替代方法,您可以将OR逻辑放入函数中,然后循环遍历您的值

function myFunctionName(value1, value2) {
  return value1 || value2;
}

//names are property names of object 'a' that you want to set, values are the alternate (default) values
var myMapping = {borderline:borderline, st1:st, reallyLongName123:reallyLongName}; 

for (temp in myMapping) {
  a.temp = myFunctionName(a[temp], myMapping[temp]);
}
由于您无法使用循环,并且无法提前知道所有值,因此可以尝试将函数添加到对象“a”中

a.test = function(propName, otherValue) {
  this[propName] = this[propName] || otherValue;
};

a.test("borderline", borderline);

我不确定这是否更短,但作为一种替代方法,您可以将OR逻辑放入函数中,然后循环遍历您的值

function myFunctionName(value1, value2) {
  return value1 || value2;
}

//names are property names of object 'a' that you want to set, values are the alternate (default) values
var myMapping = {borderline:borderline, st1:st, reallyLongName123:reallyLongName}; 

for (temp in myMapping) {
  a.temp = myFunctionName(a[temp], myMapping[temp]);
}
由于您无法使用循环,并且无法提前知道所有值,因此可以尝试将函数添加到对象“a”中

a.test = function(propName, otherValue) {
  this[propName] = this[propName] || otherValue;
};

a.test("borderline", borderline);


在Javascript中,不,据我所知不是这样。你可能想研究一下coffeescript,它有一个
?=
1
0
不受欢迎的具体原因是什么?@PatrickQ稍后我会将它制作成JSON并发送到某个地方。为了遵守协议,我必须区分
0
false
。然而,我不能将所有的零转换为
false
,因为还有有效的数值。你可能想研究一下coffeescript,它有一个
?=
1
0
不受欢迎的具体原因是什么?@PatrickQ稍后我会将它制作成JSON并发送到某个地方。为了遵守协议,我必须区分
0
false
。但我无法将所有零转换为
false
,因为还有有效的数值。不会更短,因为您仍在重复
a.borderline
两次。确切地说,主要问题是重复
a.borderline
部分,有时可能会很长。@Erlik我更新了代码以使用循环,这会让它更干净吗?@monkybonk05是的,现在不再重复了。但是,我不能使用循环,也不能使用静态初始化
var myMapping={…
。我以分散的方式获取值并使用它们(请参阅后面添加到问题中的注释)@Erlik你能为对象“a”添加函数吗?如果能,请查看我的更新。不能缩短,因为你仍在重复
a.borderline
两次。确切地说,主要问题是重复
a.borderline
部分,有时可能会很长。@Erlik我更新了代码以使用循环,这会使它更干净吗?@monkybonk05es,现在它不再重复了。但是,我不能使用循环,也不能使用静态初始化
var myMapping={…
。我以分散的方式获取值并使用它们(请参阅后面添加到我的问题中的注释)。@Erlik你能为对象“a”添加函数吗?如果能,请查看我的更新。不幸的是,我不能使用循环(在您可能已经阅读了问题后添加了注释),但我肯定会调查Coffeescript选项。谢谢!是的,我没有注意到编辑。不过,您可能会发布完整代码(在[cr.SE]的新问题中,在一些在线粘贴服务中,或在您的问题中)这样我们就可以看看是否有更好的模式了。好吧,酷!咖啡脚本对我有用。幸运的是,它可以在通过瓶颈后被编译成“长”代码,所以CS节省了时间。有趣的是,
a.st1 | |=st
被编译成
a.st1 | |(a.st1=st)
,我花了一段时间才理解,但很好..它起作用:)不幸的是,我不能使用循环(在您可能已经阅读了问题后添加了注释),但我肯定会调查Coffeescript选项。谢谢!是的,我没有注意到编辑。不过,您可以发布完整的代码(或者在[cr.SE]的新问题中发布),在一些在线粘贴服务中,或在您的问题中),这样我们就可以看到是否有更好的模式。好的,酷!咖啡脚本对我来说很有用。幸运的是,它可以在通过瓶颈后被编译成“长”代码,所以CS可以节省时间。顺便说一句,有趣的是,
a.st1 |=st
被编译成
a.st1 | |(a.st1=st)
,我花了一段时间才理解,但很好..它有效:)