在C#中是否有像JavaScript的扩展语法一样的实现?
var arr = new []{
"1",
"2"//...
};
Console.WriteLine(...arr);
Run Code Online (Sandbox Code Playgroud) 在开发我的反应程序,我需要一个条件道具发送到一个组件,所以我在什么地方找到一个模式来做到这一点,但它似乎很奇怪,我和我无法理解如何以及为什么它的工作.
如果我输入:
console.log(...undefined) // Error
console.log([...undefined]) // Error
console.log({...undefined}) // Work
Run Code Online (Sandbox Code Playgroud)
在未定义时激活扩展运算符时会引发错误,但是当undefined在对象内部时,会返回一个空对象.
我对这种行为感到非常惊讶,这真的是它应该如何,我能依靠这个并且这是一个好习惯吗?
为什么在对象中传播undefined会返回一个空对象?{...undefined} // equals {}:
console.log({...undefined})Run Code Online (Sandbox Code Playgroud)
为什么在数组中传播未定义会给出错误?
[...undefined] // type error:
console.log([...undefined])Run Code Online (Sandbox Code Playgroud)
PHP支持可变参数的扩展运算符.
在JavaScript中,您可以使用spread运算符来执行此操作:
var a = [1, 2];
var b = [...a, 3, 4];
console.log(b); // [1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
但是,尝试在PHP中执行此操作:
$a = [1, 2];
$b = [...$a, 3, 4];
var_dump($b);die;
Run Code Online (Sandbox Code Playgroud)
结果出现此错误:
解析错误:语法错误,意外'...'(T_ELLIPSIS),期待']'
在PHP中不允许使用这种方式使用扩展运算符吗?如果是这样,是否有同样优雅的方式来达到同样的效果?
我有两个数组,
const pets = ["dog", "cat", "hamster"]
const wishlist = ["bird", "snake"]
Run Code Online (Sandbox Code Playgroud)
我要附加wishlist到pets,可以使用两种方法来完成,
方法1:
pets.push.apply(pets,wishlist)
Run Code Online (Sandbox Code Playgroud)
结果如下: [ 'dog', 'cat', 'hamster', 'bird', 'snake' ]
方法2:
pets.push(...wishlist)
Run Code Online (Sandbox Code Playgroud)
这也导致: [ 'dog', 'cat', 'hamster', 'bird', 'snake' ]
当我处理更大的数据时,这两种方法在性能方面是否存在差异?
我正在尝试在打字稿函数调用上使用扩展运算符,如下所示:
function foo(x: number, y: number, z: number) {
console.log(x + y + z);
}
const args = [0, 1, 2];
foo(...args);
Run Code Online (Sandbox Code Playgroud)
但在编译时,我收到错误:“扩展参数必须具有元组类型或传递给剩余参数”(TS2556)。我究竟做错了什么?
附录:当我的参数是动态数组时,如何解决这个问题,如
const args = new Array(3).map(() => Math.random());
Run Code Online (Sandbox Code Playgroud) 为什么不能多次使用传播运算符?
let arr = [[[1, 2, 3]]];
console.log(arr); // Array [ Array[1] ]
console.log(...arr); // Array [ Array[3] ]
console.log(...(...arr));
// SyntaxError: expected '=>' after argument list, got ')'
Run Code Online (Sandbox Code Playgroud)
我希望:
console.log(...(...arr)); // Array [ 1, 2, 3 ]
Run Code Online (Sandbox Code Playgroud) 我试图从库中导入所有内容作为哈希,修改它,并重新导出修改后的哈希,而不知道库中的所有命名导出.例如:
import * as reactBootstrap from 'react-bootstrap';
wrappedReactBootstrap = doFunnyThingsTo(reactBootstrap);
export {
...wrappedReactBootstrap
};
// or
export wrappedReactBootstrap;
Run Code Online (Sandbox Code Playgroud)
我对https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/export的理解是规范不允许以下内容.有人可以证实吗?
显然,循环是不可能的,因为导出和导入语句必须是顶级的.
我有一个函数,它为传入的对象添加一个键,但我被告知使用传播运算符,我被告知我可以使用spread运算符创建一个具有相同属性的新对象,然后在其上设置isAvailable .
return new Partner(ServerConfig, capabilities, initialState)
}
class Partner {
constructor (ServerConfig, capabilities, initialState) {
initialState.isAvailable = true
Run Code Online (Sandbox Code Playgroud)
所以我尝试了类似的东西但是成功了,你能帮助我吗?并且困惑,我应该以这种方式使用spread运算符,从函数返回?
newObject = {}
//在函数中使用它并从return中获取值
return {
value: {
...newObject,
...initialState
}
}
Run Code Online (Sandbox Code Playgroud)
initialState.isAvailable = true
我最近一直在为 Visual Studio Code 的一个非常烦人的行为而苦苦挣扎。
每当我尝试使用 JavaScript扩展语法时, VSCode 会自动自动完成下一段代码(错误地)。注意我没有打TAB。这是我正在谈论的内容的演示:
有没有办法禁用它?这真的让我发疯......我正在使用Visual Studio Code 1.59.0(这应该是创作这个问题时的最新版本)。
javascript intellisense autocomplete spread-syntax visual-studio-code
spread-syntax ×10
javascript ×8
ecmascript-6 ×5
arrays ×2
apply ×1
autocomplete ×1
babel ×1
c# ×1
intellisense ×1
php ×1
typescript ×1