Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.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/6/xamarin/3.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_Spread Syntax - Fatal编程技术网

Javascript 我如何判断一个变量是否会扩散成散列而不抛出?

Javascript 我如何判断一个变量是否会扩散成散列而不抛出?,javascript,spread-syntax,Javascript,Spread Syntax,我想知道如果在键值排列构造中使用参数,参数是否会抛出: {…maybeIWillThrow} 我有一系列函数,它们使用spread简洁地实现“默认选项”行为,如下所示: const DEFAULTS={bells:true,whistles:true} 函数点(arg1,选项){ 让effectiveOptions={…默认值,…选项} //做工作。。。 } 现在我想返回并添加一些保护子句,以防止使用非散列options参数调用。使用try/catch感觉很笨拙,因为它需要两个代码块,而不是

我想知道如果在键值排列构造中使用参数,参数是否会抛出:

{…maybeIWillThrow}
我有一系列函数,它们使用spread简洁地实现“默认选项”行为,如下所示:

const DEFAULTS={bells:true,whistles:true}
函数点(arg1,选项){
让effectiveOptions={…默认值,…选项}
//做工作。。。
}
现在我想返回并添加一些保护子句,以防止使用非散列
options
参数调用。使用try/catch感觉很笨拙,因为它需要两个代码块,而不是一个,我更喜欢三元代码块,或者可能是一个单语句迂回:

let effectiveOptions=spreadsLikeButter(选项)
? {…默认值,…选项}
:{…默认值}
MDN建议(增加强调):

扩展语法(而不是扩展属性的情况下)只能应用于可扩展对象

我知道我可以使用默认参数防止
未定义的
,但如果调用方通过
5
true
,我认为
typeof options==“object”
将产生太多误报(例如
日期
承诺

有没有一种简洁的方法来测试一个变量,看看它是否会在不抛出的情况下扩散到一个对象中

现在我正在将try/catch包装成一个
willItBlend(value:any):boolean
,但我希望在更好地理解这一点后,用更干净的东西来代替它


此外,我知道我可以将所有带默认值的合并逻辑移到一个单独的函数中,以隐藏混乱情况——在我的例子中,这可能是一个好主意——但出于学术目的,让我们特别关注如何测试一个变量,以确定它是否会扩散。

您正在扩散属性。因此,无需检查它是否可编辑(无论如何都是错误的),只需检查它是否是对象。@VLAZ-数组是对象-我认为OP也需要确保它具有正确的形状,而不仅仅是任何对象?“有没有一种简洁的方法来测试变量,看看它是否会在不引发的情况下扩展到对象中?”-这:
if(object.keys(options).length)
将确保它是散列和/或是空的。@RandyCasburn是的,它们是空的。如果你想使用它们,它们也可以作为属性进行传播。问题是“不投掷”——将数组散布到对象中不会做到这一点。而散布不同形状的物体也不会。TBH,现在我想起来了,几乎没有什么东西会正常投球,除非你可能有接球手/二传手。我不确定这个问题还在问什么,因为原语是有效的,不会抛出。你有什么价值观?